How to create a validator using @cosmjs/stargate library? #50
              
                Unanswered
              
          
                  
                    
                      anshulWeb3
                    
                  
                
                  asked this question in
                Clients (JS)
              
            Replies: 0 comments
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
        
    
Uh oh!
There was an error while loading. Please reload this page.
-
I am trying to create a validator using cosmjs/stargate library. But I am stuck at an error:
{ code: 2, codespace: 'sdk', log: 'unable to resolve type URL /tendermint.PubKeyEd25519: tx parse error' }
Please take a look at the code below and help me find out the appropriate path to create a validator through client library using Node.js.
//==========================================================================================
import { DirectSecp256k1HdWallet,Registry } from "@cosmjs/proto-signing"; import { SigningStargateClient , defaultRegistryTypes,GasPrice} from "@cosmjs/stargate"; import {MsgCreateValidator} from "cosmjs-types/cosmos/staking/v1beta1/tx" import {PublicKey} from "cosmjs-types/tendermint/crypto/keys"async function createValidator() {
// Replace the following values with your actual data
const mnemonic = "forward melody elevator label awkward uniform deposit day pen office explain crack ghost armor elite drop ramp direct girl blush much brisk chief train";
const chainId = "sim_904-3";
const validatorMoniker = "MyValidator";
const validatorIdentity = "Identity information";
const validatorWebsite = "https://myvalidator.com/";
const validatorSecurityContact = "[email protected]";
const validatorDetails = "Details about my validator";
const commissionRate = "0.1";
const commissionMaxRate = "0.2";
const commissionMaxChangeRate = "0.01";
const delegationAmount = "1000000";
const coin = {
denom: "stake",
amount: "200000000000",
}; // The amount of tokens you want to delegate to your own validator (you can adjust this)
const registry = new Registry();
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, {
prefix: "cosmos",
});
const [{ address: senderAddress }] = await wallet.getAccounts();
const myRegistry = new Registry(defaultRegistryTypes);
myRegistry.register("/cosmos.staking.v1beta1.MsgCreateValidator", MsgCreateValidator);
myRegistry.register("/tendermint.crypto.PublicKey", PublicKey);
const gasPrice = GasPrice.fromString("0.0000001stake");
const client = await SigningStargateClient.connectWithSigner(
"http://localhost:26657/",
wallet,
{
gasPrice: gasPrice,
registry: myRegistry,
}
);
// Sign and broadcast the transaction
const fee = {
amount: [{ denom: "stake", amount: "500" }],
gas: "200000",
};
const sendMsg = {
typeUrl: "/cosmos.staking.v1beta1.MsgCreateValidator",
value: MsgCreateValidator.fromPartial({
description: {
moniker: validatorMoniker,
identity: validatorIdentity,
website: validatorWebsite,
securityContact: validatorSecurityContact,
details: validatorDetails,
},
commission: {
rate: commissionRate,
maxRate: commissionMaxRate,
maxChangeRate: commissionMaxChangeRate,
},
minSelfDelegation: delegationAmount,
delegatorAddress: senderAddress,
validatorAddress: "cosmosvaloper1eayalkqh7cpeaf4kgkg9gtt9qlplh7fnfjwk6z",
pubkey: {
typeUrl: "/tendermint.crypto.PublicKey",
value: Uint8Array.from(Buffer.from("KboqFFQffL+9c5Wj45hoySwlYd5OtmbREZ7kEUPuIgs=", "base64")), // The public key will be filled automatically by the library
},
value: coin,
}),
};
const txResult = await client.signAndBroadcast(senderAddress, [sendMsg], fee,"Create Validator");
return txResult;
}
createValidator()
.then((txResult) => {
console.log("Validator creation transaction result:", txResult);
})
.catch((error) => console.error("Error creating validator:", error));
//======================================================================================================
Beta Was this translation helpful? Give feedback.
All reactions