Skip to main content

Address

0x0000000000000000000000000000000000000800

Supported Methods

Transactions

Signature
delegate(address,string,uint256)
cancelUnbondingDelegation(address,string,uint256,uint256)
redelegate(address,string,string,uint256)
undelegate(address,string,uint256)

Queries

Signature
delegation(address,string)
redelegation(address,string,string)
redelegations(address,string,string,tuple)
unbondingDelegation(address,string)
validator(address)
validators(string,tuple)

Query Examples

Set the current testnet EVM JSON-RPC endpoint and precompile address:
export RPC_URL="https://test-json-rpc.cloud.aultblockchain.xyz"
export STAKING_PRECOMPILE="0x0000000000000000000000000000000000000800"

Direct call

cast call "$STAKING_PRECOMPILE" \
  "validators(string,(bytes,uint64,uint64,bool,bool))((string,string,bool,uint8,uint256,uint256,(string,string,string,string,string),int64,int64,uint256,uint256)[],(bytes,uint64))" \
  "" \
  "(0x,0,20,false,false)" \
  --rpc-url "$RPC_URL"

Call from contract

address constant STAKING = 0x0000000000000000000000000000000000000800;

struct PageRequest {
    bytes key;
    uint64 offset;
    uint64 limit;
    bool countTotal;
    bool reverse;
}

function queryStakingValidators() external view returns (bytes memory) {
    PageRequest memory page = PageRequest("", 0, 20, false, false);
    (bool ok, bytes memory out) = STAKING.staticcall(
        abi.encodeWithSignature(
            "validators(string,(bytes,uint64,uint64,bool,bool))",
            "",
            page
        )
    );
    require(ok, "precompile call failed");
    return out;
}

Transaction Examples

Environment Variables

cast wallet import ault-ops --interactive

export CAST_ACCOUNT="ault-ops"
export FROM="$(cast wallet address --account "$CAST_ACCOUNT")"
export VALOPER="<aultvaloper...>"
export AMOUNT="<amount_uint256>"

Direct call

cast send "$STAKING_PRECOMPILE" \
  "delegate(address,string,uint256)" \
  "$FROM" \
  "$VALOPER" \
  "$AMOUNT" \
  --rpc-url "$RPC_URL" \
  --account "$CAST_ACCOUNT"

Call from contract

address constant STAKING = 0x0000000000000000000000000000000000000800;

function txStakingDelegate(
    string calldata validator,
    uint256 amount
) external returns (bool) {
    (bool ok, bytes memory out) = STAKING.call(
        abi.encodeWithSignature(
            "delegate(address,string,uint256)",
            msg.sender,
            validator,
            amount
        )
    );
    require(ok, "precompile call failed");
    return abi.decode(out, (bool));
}

Notes

  • Validator arguments use the Cosmos validator operator address format (aultvaloper...).
  • Amounts are specified in base units (aault).

ABI

Download Staking ABI JSON