Blockchain Contract Action Methods

Each blockchain contract function has some additional functionality you can find very useful

action.getRawTransaction(params, ?options)

Construct raw transaction for an action

const faucetContract = eoslime.Contract.fromFile(FAUCET_ABI_PATH, faucetAccount.name, faucetAccount);

const rawFunctionTx = await faucetContract.actions.produce.
getRawTransaction([myAccount.name, '100.0000 TKNS']);

/*
    rawFunctionTx = 
    { 
        expiration: '2019-11-12T15:19:15',
          ref_block_num: 24381,
          ref_block_prefix: 3641461961,
          max_net_usage_words: 0,
          max_cpu_usage_ms: 0,
          delay_sec: 0,
          context_free_actions: [],
          actions:
           [ { account: 'l3ac5afc1334',
               name: 'produce',
               authorization: [Array],
               data:
                '20d458628c150e8940420f000000000004544b4e530000000c6c6532353331343433636335046d656d6f' } ],
          transaction_extensions: [] 
      }
*/

The options one can provide here are the same as the ones for the contract actions

const faucetContract = eoslime.Contract.fromFile(FAUCET_ABI_PATH, faucetAccount.name, faucetAccount);

const rawFunctionTx = await faucetContract.actions.produce.
getRawTransaction([myAccount.name, '100.0000 TKNS'], { unique: true });

action.sign(params, ?options)

Sign action and return a ready-to-broadcast transaction

const faucetContract = eoslime.Contract.fromFile(FAUCET_ABI_PATH, faucetAccount.name, faucetAccount);

const signedFunctionTx = await faucetContract.actions.
produce.sign([myAccount.name, '100.0000 TKNS']);

/*
    signedActionTx = 
    { 
        compression: 'none',
        signatures:
        [ 'SIG_K1_K7nuuRW3LTzcjwjot6BStnSKj4cmdgNBp8yXsqJuAxTTrRiLEGmA253JBPLt6pNL4XWopJrA3UrhXWnLDcB3XAmYR25J9j'],
        transaction:
        { 
            expiration: '2019-11-12T15:22:38',
            ref_block_num: 24786,
            ref_block_prefix: 24901427,
            max_net_usage_words: 0,
            max_cpu_usage_ms: 0,
            delay_sec: 0,
            context_free_actions: [],
            actions: [ [Object] ],
            transaction_extensions: [] 
         }
     }
*/

The options one can provide here are the same as the ones for the contract actions

const faucetContract = eoslime.Contract.fromFile(FAUCET_ABI_PATH, faucetAccount.name, faucetAccount);

const rawFunctionTx = await faucetContract.actions.produce.
sign([myAccount.name, '100.0000 TKNS'], { from: ANOTHER_ACCOUNT });

Events

processed

You can process some logic every time a contract function is broadcasted to the chain

const faucetContract = eoslime.Contract.fromFile(FAUCET_ABI_PATH, faucetAccount.name, faucetAccount);

faucetContract.produce.on('processed', (txReceipt) => 
        {
                // do some custom logic
        }
);
    

Last updated