NOT
Düğümlerle etkileşim kurmanın birkaç yolu vardır: CLI’yi kullanmak, gRPC’yi kullanmak veya REST uç noktalarını kullanmak.
CLI’yi kullanabilirsiniz injectived
düğümlerle etkileşime geçmek için. Yerel özel ağınızdaki düğümlerle etkileşim kuruyorsanız, CLI’yi kullanmadan önce düğümün bir terminalde çalıştığından emin olun.
Kullanım hakkında daha fazla bilgi için injectived
gitmek kullanma injectived
.
Protobuf ekosistemi, dosyalardan kod oluşturmak da dahil olmak üzere çeşitli kullanım durumları için araçlar geliştirmiştir. *.proto
farklı programlama dillerinde. Bu araçlar, müşteri oluşturmayı kolaylaştırır. Çoğu zaman, istemci bağlantısı (yani aktarım) kolayca eklenebilir ve değiştirilebilir. Popüler bir yönlendirme yöntemi olan gRPC’yi düşünün.
Kod oluşturma kitaplığı büyük ölçüde kendi teknik yığınınıza bağlı olduğundan, yalnızca iki alternatif sunacağız:
grpcurl
genel hata ayıklama ve test için- programlı olarak Go, Python veya TS kullanarak
grpcurl benzer curl
, ancak gRPC için. Go kitaplığı olarak da kullanılabilir, ancak biz onu yalnızca hata ayıklama ve test için bir CLI komutu olarak kullanacağız. Yüklemek için yukarıdaki bağlantıdaki talimatları izleyin.
Çalışan bir yerel düğümünüz (veya canlı ağa bağlı bir ağınız) olduğunu varsayarsak, kullanılabilir Protobuf hizmetlerini görüntülemek için aşağıdaki komutu çalıştırabilmeniz gerekir (localhost:9000’i grpc alanında yapılandırılmış başka bir düğümün gRPC sunucusu uç noktası ile değiştirebilirsiniz) app.toml’deki .adres:
grpcurl -plaintext localhost:9090 list
cosmos.bank.v1beta1.Query gibi gRPC hizmetlerinin bir listesini görmelisiniz. Buna bir Protobuf uç noktası olan ve mevcut tüm uç noktaların açıklamasını döndüren harita denir. Her biri farklı bir Protobuf hizmetini temsil eder ve her hizmet sorgulanabilecek birden çok RPC yöntemi sunar.
Hizmet açıklamasını almak için aşağıdaki komutu çalıştırabilirsiniz:
# Служба, яку ми хочемо дослідити
grpcurl \\\\
localhost:9090 \\\\
describe cosmos.bank.v1beta1.Query
Düğümden bilgi istemek için bir RPC araması yapmak da mümkündür:
grpcurl \\\\
-plaintext
-d '{"address":"$MY_VALIDATOR"}' \\\\
localhost:9090 \\\\
cosmos.bank.v1beta1.Query/AllBalances
Bazılarını ileterek geçmiş verileri de talep edebilirsiniz. gRPC sınır verileri request: x-cosmos-block-height meta verisi, talep edilecek bloğu içermelidir. Yukarıdaki durumda olduğu gibi grpcurl kullanıldığında, komut şöyle görünür:
grpcurl \\\\
-plaintext \\\\
-H "x-cosmos-block-height: 279256" \\\\
-d '{"address":"$MY_VALIDATOR"}' \\\\
localhost:9090 \\\\
cosmos.bank.v1beta1.Query/AllBalances
Bu bloktaki durum henüz düğüm tarafından silinmemişse, bu sorgu boş olmayan bir yanıt döndürmelidir.
NOT
Aşağıdaki örnekler Go’da yazılmıştır, ancak Python SDK ve TS, düğüm / Injective zinciriyle programlı olarak etkileşim kurmak için de kullanılabilir.
Aşağıdaki kod, bir Go uygulaması içinde gRPC kullanılarak durum isteğinin nasıl yapıldığını gösterir. Fikir, bir gRPC bağlantısı oluşturmak ve oluşturulan Protobuf istemci kodunu gRPC sunucusunu sorgulamak için kullanmaktır.
import (
"context"
"fmt""google.golang.org/grpc"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
)
func queryState() error {
myAddress, err := sdk.AccAddressFromBech32("inj...")
if err != nil {
return err
}
// Створення з'єднання до сервера gRPC.
grpcConn := grpc.Dial(
"127.0.0.1:9090",// Ваша адреса gRPC-сервера.
grpc.WithInsecure(),// SDK не підтримує жодного механізму безпеки транспорту.
)
defer grpcConn.Close()
// Це створює клієнта gRPC для запиту до служби x/bank.
bankClient := banktypes.NewQueryClient(grpcConn)
bankRes, err := bankClient.Balance(
context.Background(),
&banktypes.QueryBalanceRequest{Address: myAddress, Denom: "inj"},
)
if err != nil {
return err
}
fmt.Println(bankRes.GetBalance())// Виводить баланс рахунку.
return nil
}
Geçmiş bloklar, blok meta verilerinin gRPC isteğine eklenmesiyle talep edilir.
import (
"context"
"fmt""google.golang.org/grpc"
"google.golang.org/grpc/metadata"
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
"github.com/cosmos/cosmos-sdk/types/tx"
)
func queryState() error {
// --snip--
var header metadata.MD
bankRes, err = bankClient.Balance(
metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"),// Додавання метаданих до запиту
&banktypes.QueryBalanceRequest{Address: myAddress, Denom: denom},
grpc.Header(&header),// Отримання заголовка відповіді
)
if err != nil {
return err
}
blockHeight = header.Get(grpctypes.GRPCBlockHeightHeader)
fmt.Println(blockHeight)// Виводить висоту блоку (12)
return nil
}
Cosmos SDK’daki tüm gRPC hizmetleri, bir gRPC ağ geçidi aracılığıyla daha uygun REST tabanlı istekler için kullanılabilir. URL yolu biçimi, Protobuf hizmet yönteminin tam adını temel alır, ancak nihai URL’lerin daha belirgin görünmesini sağlamak için küçük ince ayarlar içerebilir. Örneğin, bir yöntem için REST bitiş noktası cosmos.bank.v1beta1.Query/AllBalances
– Bu GET /cosmos/bank/v1beta1/balances/{address}
. Sorgu bağımsız değişkenleri, sorgu parametreleri olarak iletilir.
Aşağıdaki örnekler, yerel özel ağınızdaki bir düğümle etkileşim kurmak için REST uç noktalarını kullandığınızı varsayar. Etki alanını genel ağlar olarak değiştirebilirsiniz.
Spesifik bir örnek olarak, takım curl
bir bakiye sorgulaması için şöyle görünür:
curl \\\\
-X GET \\\\
-H "Content-Type: application/json" \\\\
<http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR>
değiştirdiğinizden emin olun localhost:1317
alan için yapılandırılmış düğümünüzün REST noktasında api.address
.
Kullanılabilir tüm REST uç noktalarının bir listesi Swagger belirtim dosyası olarak mevcuttur ve şu adreste görüntülenebilir: localhost:1317/swagger
. Dosyanızdan emin olun app.toml
bir alan içerir api.swagger
değere ayarlayın true
.
Bir HTTP başlığı kullanılarak geçmiş durum isteği yapılır x-cosmos-block-height
. Örneğin, Curl komutu şuna benzer:
curl \\\\
-X GET \\\\
-H "Content-Type: application/json" \\\\
-H "x-cosmos-block-height: 279256"
<http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR>
Bu bloktaki durumun henüz düğüm tarafından silinmediğini varsayarsak, bu istek, verileri içeren bir yanıt döndürmelidir.
CORS politikaları güvenlik nedeniyle varsayılan olarak etkin değildir. Rest-server’ı halka açık bir ortamda kullanmak istiyorsanız, bir ters proxy sağlamanızı öneririz, bu ile yapılabilir. nginx. Test ve geliştirme için bir alan var enabled-unsafe-cors
dosyanın içinde app.toml
.
gRPC ve REST kullanarak işlem göndermek için ek adımlar gerekir: bir işlem oluşturun, imzalayın ve son olarak yayınlayın. Şurada işlem oluşturma hakkında daha fazlasını okuyun: Injective TS Repo Wiki.