Wasm contract entegrasyonu ile, on chain contractları listeleyeceğiz, ve contractlara dair bazı bilgileri UI üzerinde göstermiş olacağız.
Contractlar'ı ve code'ları listeleyin.
Contractların ve code'ların gerekli bilgilerini parse edin.
Gereken DB collection'ları oluşturun. Tüm gerekli veriler database'de tutulacak.
UI için ilgili route'ları oluşturun.
UI'da label'lerimiz olacak;
Codes
ID - HASH - CREATOR - VERSION
Contracts
ID - CONTRACT - NAME - ADDRESS - CREATOR - ADMIN
Contract list
Rest API ile bir çok veriyi çekebiliyoruz.
Base URL olarak bunu kullanabiliriz: https://lcd.osmosis.zone (yani örnek queryler için bu resti kullanabiliriz.)
Öncelikle, kontratları query ile alabilmek için code_id değerlerine ihtiyacımız var.
Contract query: Bir code_id ile ilişik kontratları alabilmek için bu endpoint'i kullanıyoruz:
/cosmwasm/wasm/v1/code/{{code_id}}/contracts
Ağ üzerinde ki code_id'leri nasıl alacağız?
ID query:
/cosmwasm/wasm/v1/code
Yukarıda ki endpoint ile, tüm code_id değerlerini alabiliyoruz.
code_id değerlerini aldıktan sonra, her code_id için contract query endpointine istek atacağız. İstek sonucunda elimize contract adresleri gelmiş olacak.
Sonrasında her kontratın spesifik bilgilerini alacağız.
Code details
ID query başlığı altında ki endpointi kullanıyoruz.
Labellarımız:
ID - HASH - CREATOR - VERSION
ID:code_id değeri.
HASH:data_hash değeri.
VERSION: doğrudan sorgulamanın bir yolunu bulamadım. Şu şekilde yapabileceğimizi düşünüyorum, her code_id bir ya da daha fazla kontrat içerir genelde. içerdiği kontratlardan herhangi birine query yapacağız ve versiyon değerini alacağız. Versionu nasıl aldığımız bilgisini Contract Details başlığı altında değindim. Eğer ki bir code ile ilişik kontrat yoksa, versiyon değerini null olarak döndürebiliriz.
Contractlara özel sayfalarımız olacak, Contract details başlığı altında ki verilere ek olarak burada contractlara dair daha faza bilgiye yer vereceğiz.
Başlıklar:
Instantiate message & TxHash:
Aşağıda ki endpoint'i kullanıyoruz. Bu endpoint ile contract oluşturulduğunda elde edilen msg değerine (yani Instantiate message) ve txhash değerine ulaşabiliyoruz.
aslında msg değerini şu endpoint ile de alabiliyoruz, /cosmwasm/wasm/v1/contract/{{contract_address}}/history
ancak buradan txhash'ı almak mümkün olmadığı için üstte ki endpoint daha kullanışlı diye düşünüyorum. Tabii ki üstte ki endpoint'in doğru veriyi bize verebilmesi için bir archive node'a ihtiyacımız olabilir. Çünkü bir contract çok uzun bir süre önce oluşturulmuş olabilir.
Wasm contracts entegrasyonu
https://github.com/CosmWasm/wasmd/blob/main/proto/cosmwasm/wasm/v1/query.proto
Wasm contract entegrasyonu ile, on chain contractları listeleyeceğiz, ve contractlara dair bazı bilgileri UI üzerinde göstermiş olacağız.
UI'da label'lerimiz olacak;
Codes
ID - HASH - CREATOR - VERSION
Contracts
ID - CONTRACT - NAME - ADDRESS - CREATOR - ADMIN
Contract list
Rest API ile bir çok veriyi çekebiliyoruz.
Base URL olarak bunu kullanabiliriz:
https://lcd.osmosis.zone
(yani örnek queryler için bu resti kullanabiliriz.)Öncelikle, kontratları query ile alabilmek için
code_id
değerlerine ihtiyacımız var.Contract query: Bir
code_id
ile ilişik kontratları alabilmek için bu endpoint'i kullanıyoruz:Ağ üzerinde ki
code_id
'leri nasıl alacağız?ID query:
Yukarıda ki endpoint ile, tüm
code_id
değerlerini alabiliyoruz. code_id değerlerini aldıktan sonra, hercode_id
için contract query endpointine istek atacağız. İstek sonucunda elimize contract adresleri gelmiş olacak.Örnek:
Response:
Sonrasında her kontratın spesifik bilgilerini alacağız.
Code details
ID query başlığı altında ki endpointi kullanıyoruz.
Labellarımız:
ID - HASH - CREATOR - VERSION
ID:
code_id
değeri.HASH:
data_hash
değeri.VERSION: doğrudan sorgulamanın bir yolunu bulamadım. Şu şekilde yapabileceğimizi düşünüyorum, her
code_id
bir ya da daha fazla kontrat içerir genelde. içerdiği kontratlardan herhangi birine query yapacağız ve versiyon değerini alacağız. Versionu nasıl aldığımız bilgisini Contract Details başlığı altında değindim. Eğer ki bir code ile ilişik kontrat yoksa, versiyon değerininull
olarak döndürebiliriz.Contract details
Endpoint:
/cosmwasm/wasm/v1/contract/{{contract_address}}
Örnek request: https://lcd.osmosis.zone/cosmwasm/wasm/v1/contract/osmo1wl59k23zngj34l7d42y9yltask7rjlnxgccawc7ltrknp6n52fps94qsjd
Örnek response:
Labellarımız:
ID - CONTRACT - NAME - ADDRESS - CREATOR - ADMIN
ID:
code_id
değeri.CONTRACT: versiyon bilgisini aldığımız query'de ki
contract
değeri. (aşağıda nasıl alınacağına dair bilgi verildi.)NAME:
label
değeri.ADDRESS:
address
değeri.CREATOR:
creator
değeri.ADMIN:
admin
değeri. (bir değer yoksa null döndürebiliriz.)Contract version, ve contract detayını alacağımız endpoint aşağıda:
Contract version & contract:
/cosmwasm/wasm/v1/contract/{{contract_address}}/raw/Y29udHJhY3RfaW5mbw==
data, base64 formatında gelir.
Örnek query:
Örnek response:
base64 decoding yaptığımızda:
{"contract":"crates.io:cw3-fixed-multisig","version":"0.13.2"}
Biraz daha detaya ineceğiz.
Contractlara özel sayfalarımız olacak, Contract details başlığı altında ki verilere ek olarak burada contractlara dair daha faza bilgiye yer vereceğiz.
Başlıklar:
Instantiate message & TxHash:
Aşağıda ki endpoint'i kullanıyoruz. Bu endpoint ile contract oluşturulduğunda elde edilen
msg
değerine (yani Instantiate message) vetxhash
değerine ulaşabiliyoruz.aslında
msg
değerini şu endpoint ile de alabiliyoruz,/cosmwasm/wasm/v1/contract/{{contract_address}}/history
ancak buradan txhash'ı almak mümkün olmadığı için üstte ki endpoint daha kullanışlı diye düşünüyorum. Tabii ki üstte ki endpoint'in doğru veriyi bize verebilmesi için bir archive node'a ihtiyacımız olabilir. Çünkü bir contract çok uzun bir süre önce oluşturulmuş olabilir.msg:
TxHASH:
Contract states:
Endpoint:
/cosmwasm/wasm/v1/contract/
{{contract_address}}/state`Gelen veri şekli encodelidir.
key
vevalue
olarak data gelir. Örnek:key
datası, hex biçiminde gelir.hex to ASCII text
vari bir dönüştürme yapılmalı okunabilir olması için.value
datası,base64
formatında gelir, aynı şekilde bunun da decode edilmesi gerekir.Önemli olan bir diğer nokta, çok fazla state olabileceği, burada pagination kullanmamız gerekebilir. Swagger üzerinden kontrol edebilirsiniz bu endpointi: https://kujira-api.polkachu.com/#/Query/CosmwasmWasmV1AllContractState
Contract executions (transactions)
2 endpointimiz var.
Endpoint:
/cosmos/tx/v1beta1/txs?events=execute._contract_address='{{contract_address}}'&events=coin_spent.spender='{{contract_address}}'
Endpoint:
/cosmos/tx/v1beta1/txs?events=execute._contract_address='{{contract_address}}'&events=coin_received.receiver='{{contract_address}}'
Bu endpointler ile, bir contract'ın yürütmelerini, yani o kontrat ile ilişik transferleri çekeceğiz.
Çekeceğimiz transaction'ları, belirli bir formatta çekmeliyiz. Hangi detayları alacağız bakalım:
Örnek query:
Alacağımız veriler.
Message type:
msg
labelinde bulunan text. aşağıda ki örnekte mesela bu değer,repay
.TxHash:
txhash
değerimiz.Height: üstte ki örnekte de görünen
height
değeri.Time:
timestamp
değeri.Result:
data
labeli boş ise, fail,data
labeli değer döndürmüşsesuccess
. Örnek fail tx: