Skip to content

Commit

Permalink
feat: skip sig verification on genesis block
Browse files Browse the repository at this point in the history
  • Loading branch information
j75689 committed Aug 16, 2023
1 parent 5a5336b commit c1b5e84
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 46 deletions.
20 changes: 16 additions & 4 deletions deployment/localup/localup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ function init() {

# create genesis accounts
${bin} keys add validator${i} --keyring-backend test --home ${workspace}/.local/validator${i} > ${workspace}/.local/validator${i}/info 2>&1
${bin} keys add validator_delegator${i} --keyring-backend test --home ${workspace}/.local/validator${i} > ${workspace}/.local/validator${i}/delegator_info 2>&1
${bin} keys add validator_bls${i} --keyring-backend test --home ${workspace}/.local/validator${i} --algo eth_bls > ${workspace}/.local/validator${i}/bls_info 2>&1
${bin} keys add relayer${i} --keyring-backend test --home ${workspace}/.local/relayer${i} > ${workspace}/.local/relayer${i}/relayer_info 2>&1
${bin} keys add challenger${i} --keyring-backend test --home ${workspace}/.local/challenger${i} > ${workspace}/.local/challenger${i}/challenger_info 2>&1
Expand Down Expand Up @@ -58,6 +59,12 @@ function generate_genesis() {
validator_addrs+=("$(${bin} keys show validator${i} -a --keyring-backend test --home ${workspace}/.local/validator${i})")
done

declare -a deletgator_addrs=()
for ((i=0;i<${size};i++));do
# export delegator addresses
deletgator_addrs+=("$(${bin} keys show validator_delegator${i} -a --keyring-backend test --home ${workspace}/.local/validator${i})")
done

declare -a relayer_addrs=()
for ((i=0;i<${size};i++));do
# export validator addresses
Expand All @@ -77,6 +84,11 @@ function generate_genesis() {
${bin} add-genesis-account $validator_addr ${GENESIS_ACCOUNT_BALANCE}${STAKING_BOND_DENOM} --home ${workspace}/.local/validator${i}
done

for deletgator_addr in "${deletgator_addrs[@]}";do
# init genesis account in genesis state
${bin} add-genesis-account $deletgator_addr ${GENESIS_ACCOUNT_BALANCE}${STAKING_BOND_DENOM} --home ${workspace}/.local/validator${i}
done

for relayer_addr in "${relayer_addrs[@]}";do
# init genesis account in genesis state
${bin} add-genesis-account $relayer_addr ${GENESIS_ACCOUNT_BALANCE}${STAKING_BOND_DENOM} --home ${workspace}/.local/validator${i}
Expand All @@ -90,13 +102,14 @@ function generate_genesis() {
rm -rf ${workspace}/.local/validator${i}/config/gentx/

validatorAddr=${validator_addrs[$i]}
deletgatorAddr=${deletgator_addrs[$i]}
relayerAddr="$(${bin} keys show relayer${i} -a --keyring-backend test --home ${workspace}/.local/relayer${i})"
challengerAddr="$(${bin} keys show challenger${i} -a --keyring-backend test --home ${workspace}/.local/challenger${i})"
blsKey="$(${bin} keys show validator_bls${i} --keyring-backend test --home ${workspace}/.local/validator${i} --output json | jq -r .pubkey_hex)"
blsProof="$(${bin} keys sign "${blsKey}" --from validator_bls${i} --keyring-backend test --home ${workspace}/.local/validator${i})"

# create bond validator tx
${bin} gentx validator${i} ${STAKING_BOND_AMOUNT}${STAKING_BOND_DENOM} $validatorAddr $relayerAddr $challengerAddr $blsKey $blsProof \
${bin} gentx "${STAKING_BOND_AMOUNT}${STAKING_BOND_DENOM}" "$validatorAddr" "$deletgatorAddr" "$relayerAddr" "$challengerAddr" "$blsKey" "$blsProof" \
--home ${workspace}/.local/validator${i} \
--keyring-backend=test \
--chain-id=${CHAIN_ID} \
Expand Down Expand Up @@ -224,7 +237,7 @@ function generate_sp_genesis {
spmaintenance_addr=("$(${bin} keys show sp${i}_maintenance -a --keyring-backend test --home ${workspace}/.local/sp${i})")
validator0Addr="$(${bin} keys show validator0 -a --keyring-backend test --home ${workspace}/.local/validator0)"
# create bond storage provider tx
${bin} spgentx sp${i} ${SP_MIN_DEPOSIT_AMOUNT}${STAKING_BOND_DENOM} \
${bin} spgentx ${SP_MIN_DEPOSIT_AMOUNT}${STAKING_BOND_DENOM} \
--home ${workspace}/.local/sp${i} \
--creator=${spoperator_addr} \
--operator-address=${spoperator_addr} \
Expand All @@ -245,8 +258,7 @@ function generate_sp_genesis {
--node-id "sp${i}" \
--ip 127.0.0.1 \
--gas "" \
--output-document=${workspace}/.local/gensptx/gentx-sp${i}.json \
--from sp${i}
--output-document=${workspace}/.local/gensptx/gentx-sp${i}.json
done

rm -rf ${workspace}/.local/validator0/config/gensptx/
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ replace (
github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v0.0.0-20230815065708-123390673ba9
github.com/cometbft/cometbft-db => github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1
github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0
github.com/cosmos/cosmos-sdk => github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.3.0.20230815071933-833c0d4721b4
github.com/cosmos/cosmos-sdk => github.com/j75689/greenfield-cosmos-sdk v0.0.0-20230816015055-befcfb33ef1e
github.com/cosmos/iavl => github.com/bnb-chain/greenfield-iavl v0.20.1
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
)
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,6 @@ github.com/bnb-chain/greenfield-cometbft v0.0.0-20230815065708-123390673ba9 h1:c
github.com/bnb-chain/greenfield-cometbft v0.0.0-20230815065708-123390673ba9/go.mod h1:3nGT4Z9fHwgRlBY/rofn0rSarnIcNbuhz/eq0XlLlkg=
github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1 h1:XcWulGacHVRiSCx90Q8Y//ajOrLNBQWR/KDB89dy3cU=
github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1/go.mod h1:ey1CiK4bYo1RBNJLRiVbYr5CMdSxci9S/AZRINLtppI=
github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.3.0.20230815071933-833c0d4721b4 h1:iE5yATUWWXLElEK9vhYFfpPRBl0DQFg4elMz2YN5ZSQ=
github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.3.0.20230815071933-833c0d4721b4/go.mod h1:IGSt+LL/UIUEBzpy3AOdrs3wDsSKYeqUZDH0shyOFkg=
github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230425074444-eb5869b05fe9 h1:6fLpmmI0EZvDTfPvI0zy5dBaaTUboHnEkoC5/p/w8TQ=
github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230425074444-eb5869b05fe9/go.mod h1:rbc4o84RSEvhf09o2+4Qiazsv0snRJLiEZdk17HeIDw=
github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20230425074444-eb5869b05fe9 h1:1ZdK+iR1Up02bOa2YTZCml7PBpP//kcdamOcK6aWO/s=
Expand Down Expand Up @@ -704,6 +702,8 @@ github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHn
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g=
github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo=
github.com/j75689/greenfield-cosmos-sdk v0.0.0-20230816015055-befcfb33ef1e h1:8y425s2sT2j0LL72WX50lGL5t6FCqDEZvXZSQ0yNQVQ=
github.com/j75689/greenfield-cosmos-sdk v0.0.0-20230816015055-befcfb33ef1e/go.mod h1:C4iDO5NuIlmlyFsIqhItF1A6ouAwsZmn20LQ0YhE0Mg=
github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
Expand Down
53 changes: 14 additions & 39 deletions x/gensp/client/cli/gentx.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,11 @@ import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/cosmos/cosmos-sdk/server"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/version"
authclient "github.com/cosmos/cosmos-sdk/x/auth/client"
authTx "github.com/cosmos/cosmos-sdk/x/auth/tx"
"github.com/cosmos/cosmos-sdk/x/genutil"
"github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/pkg/errors"
Expand All @@ -34,17 +33,17 @@ func SPGenTxCmd(mbm module.BasicManager, txEncCfg client.TxEncodingConfig, genBa
fsCreateStorageProvider, defaultsDesc := cli.CreateStorageProviderMsgFlagSet(ipDefault)

cmd := &cobra.Command{
Use: "spgentx [key_name] [amount]",
Use: "spgentx [amount]",
Short: "Generate a genesis tx that creates a storage provider",
Args: cobra.ExactArgs(2),
Args: cobra.ExactArgs(1),
Long: fmt.Sprintf(`Generate a genesis transaction that creates a storage provider,
that is signed by the key in the Keyring referenced by a given name. A node ID and consensus
pubkey may optionally be provided. If they are omitted, they will be retrieved from the priv_validator.json
file. The following default parameters are included:
%s
Example:
$ %s gentx sp0 10000000000000000000000000BNB --home ./deployment/localup/.local/sp0 \
$ %s gentx 10000000000000000000000000BNB --home ./deployment/localup/.local/sp0 \
--creator=0x76330E9C31D8B91a8247a9bbA2959815D3008417 \
--operator-address=0x76330E9C31D8B91a8247a9bbA2959815D3008417 \
--funding-address=0x52C30AA52788ec9C8F36C3774C1F50702BCa59b9 \
Expand All @@ -55,7 +54,7 @@ $ %s gentx sp0 10000000000000000000000000BNB --home ./deployment/localup/.local/
--keyring-backend=test --chain-id=greenfield_9000-121 \
--moniker=sp0 --details=sp0 --website=http://website --endpoint="http://127.0.0.1:9033" \
--node tcp://localhost:26752 --node-id sp0 --ip 127.0.0.1 \
--gas '' --output-document=./deployment/localup/.local/gensptx/gentx-sp0.json --from sp0
--gas '' --output-document=./deployment/localup/.local/gensptx/gentx-sp0.json
`, defaultsDesc, version.AppName,
),
RunE: func(cmd *cobra.Command, args []string) error {
Expand Down Expand Up @@ -93,28 +92,19 @@ $ %s gentx sp0 10000000000000000000000000BNB --home ./deployment/localup/.local/

inBuf := bufio.NewReader(cmd.InOrStdin())

name := args[0]
key, err := clientCtx.Keyring.Key(name)
if err != nil {
return errors.Wrapf(err, "failed to fetch '%s' from the keyring", name)
}

// set flags for creating a gensptx
createSpCfg, err := cli.PrepareConfigForTxCreateStorageProvider(cmd.Flags())
if err != nil {
return errors.Wrap(err, "error creating configuration to create storage provider msg")
}

amount := args[1]
amount := args[0]
coins, err := sdk.ParseCoinsNormalized(amount)
if err != nil {
return errors.Wrap(err, "failed to parse coins")
}
addr, err := key.GetAddress()
if err != nil {
return err
}
err = genutil.ValidateAccountInGenesis(genesisState, genBalIterator, addr, coins, cdc)

err = genutil.ValidateAccountInGenesis(genesisState, genBalIterator, createSpCfg.FundingAddress, coins, cdc)
if err != nil {
return errors.Wrap(err, "failed to validate account in genesis")
}
Expand All @@ -123,7 +113,7 @@ $ %s gentx sp0 10000000000000000000000000BNB --home ./deployment/localup/.local/
if err != nil {
return err
}
clientCtx = clientCtx.WithInput(inBuf).WithFromAddress(addr)
clientCtx = clientCtx.WithInput(inBuf).WithFromAddress(createSpCfg.FundingAddress)

createSpCfg.Deposit = amount

Expand All @@ -133,20 +123,10 @@ $ %s gentx sp0 10000000000000000000000000BNB --home ./deployment/localup/.local/
return errors.Wrap(err, "failed to build create-validator message")
}

if key.GetType() == keyring.TypeOffline || key.GetType() == keyring.TypeMulti {
cmd.PrintErrln("Offline key passed in. Use `tx sign` command to sign.")
return txBldr.PrintUnsignedTx(clientCtx, msg)
}

// write the unsigned transaction to the buffer
w := bytes.NewBuffer([]byte{})
clientCtx = clientCtx.WithOutput(w)

// TODO when Owen add default param:ReadPrice FreeReadQuota StorePrice
//if err = msg.ValidateBasic(); err != nil {
// return err
//}

if err = txBldr.PrintUnsignedTx(clientCtx, msg); err != nil {
return errors.Wrap(err, "failed to print unsigned std tx")
}
Expand All @@ -157,16 +137,11 @@ $ %s gentx sp0 10000000000000000000000000BNB --home ./deployment/localup/.local/
return errors.Wrap(err, "failed to read unsigned gen tx file")
}

// sign the transaction and write it to the output file
txBuilder, err := clientCtx.TxConfig.WrapTxBuilder(stdTx)
if err != nil {
return fmt.Errorf("error creating tx builder: %w", err)
}

err = authclient.SignTx(txFactory, clientCtx, name, txBuilder, true, true)
if err != nil {
return errors.Wrap(err, "failed to sign std tx")
}
// sig verification will skip in the genesis block,
// but still need a data to be set in Tx to skip the basic validation.
underlyingTx := authTx.UnWrapTx(stdTx)
underlyingTx.Signatures = [][]byte{[]byte(fmt.Sprintf("genesis create sp [%s]", createSpCfg.Moniker))}
stdTx = underlyingTx

outputDocument, _ := cmd.Flags().GetString(flags.FlagOutputDocument)
if outputDocument == "" {
Expand Down

0 comments on commit c1b5e84

Please sign in to comment.