UNPKG

namillum

Version:
84 lines (66 loc) 2.94 kB
--- sidebar_position: 4 --- # contract State Review the Javascript that defines [queryState.js](https://github.com/Zilliqa/Zilliqa-JavaScript-Library-Examples/blob/master/node/queryState.js) ## Retrieve a contracts state Now we have called a transition and that has set some mutable state on our contract, we can fetch this value and use it for ensuring that the correct value is being returned. The contract state currently says our state for `total_button_clicks` is the value `1`, but we need to pull that value into the backend. ![Docusaurus](/img/tutorials/incrementingbutton/IDE-state.png) ```js ... // webhook to listen to events emited back to clients const websocket = "wss://dev-ws.zilliqa.com" // mutable state field name to monitor const state_field_to_monitor = "total_count_clicks" ... // Listen for events from a contract - errors aren't caught async function ListenForEvents(deployed_contract_base_16) { const subscriber = zilliqa.subscriptionBuilder.buildEventLogSubscriptions( websocket, { addresses: [ deployed_contract_base_16 ], }, ); console.log("Listener started"); subscriber.emitter.on(MessageType.EVENT_LOG, async (event) => { console.log('get new event log: ', JSON.stringify(event)); // this will emit 2/3 times before event emitted const current_button_click_count = await zilliqa.blockchain.getSmartContractSubState( deployed_contract_base_16, state_field_to_monitor ); console.log(current_button_click_count.result); }); await subscriber.start(); } ``` We add this method to our implementation ```js // Application Definition // DEPLOY a contract, // SEND a transaction // LISTEN to events emitted // MONITOR mutable state async function DeploySendListenMonitor() { deployed_contract_base_16 = await DeployButtonContract(); bech_32_bystr = toBech32Address(deployed_contract_base_16); console.log(`got ${bech_32_bystr} from ${deployed_contract_base_16}`); await Promise.all([ ListenForEvents(deployed_contract_base_16), PressTheButton(bech_32_bystr), ]); } ``` ```bash ... Listener started Pressing the button... Waiting transaction be confirmed get new event log: {"query":"EventLog"} { total_count_clicks: '0' } get new event log: {"query":"EventLog","value":[{"address":"a69656b54638aa2ffb8c1e59d4b2705fcce177c2","event_logs":[{"_eventname":"PressTheButtonSuccess","params":[{"type":"ByStr20","value":"0x428a2aa43456fe7fd2de66e48c1fbf372ec10eae","vname":"button_presser"}]},{"_eventname":"IncrementCounterSuccess","params":[{"type":"Uint128","value":"0","vname":"pcc"},{"type":"Uint128","value":"1","vname":"ncc"}]},{"_eventname":"NewClickerState","params":[{"type":"ByStr20","value":"0x428a2aa43456fe7fd2de66e48c1fbf372ec10eae","vname":"nc"}]}]}]} { total_count_clicks: '1' } Button pressed by : 0x428A2aA43456FE7fd2De66E48C1fBf372eC10eAE ```