For the complete documentation index, see llms.txt. This page is also available as Markdown.

Update dappservices contract by msig

To update the dappservices contract to the mainnet version on kylin, run

cleos -u https://mainnet.eosn.io get code dappservices --wasm -c dappservices.wasm -a dappservices.abi

Take this abi/wasm and put it in a dappservices folder

mkdir dappservices
mv dappservices.abi dappservices
mv dappservices.wasm dappservices

Then use/modify the following scripts to push the code update by msig on Kylin or Mainnet

Kylin

const { Api, JsonRpc, RpcError, Serialize } = require('eosjs');
const { JsSignatureProvider } = require('eosjs/dist/eosjs-jssig');      // development only
const fetch = require('node-fetch');                                    // node only; not needed in browsers
const { TextEncoder, TextDecoder } = require('util');   

const defaultPrivateKey = ""; // natdeveloper
const signatureProvider = new JsSignatureProvider([defaultPrivateKey]);

const rpc = new JsonRpc('https://kylin.eosn.io', { fetch });
const rpc2 = new JsonRpc('http://localhost:8888', { fetch });

const api = new Api({ rpc, signatureProvider, textDecoder: new TextDecoder(), textEncoder: new TextEncoder(), abiProvider: rpc2 });
// const api2 = new Api({ rpc2, signatureProvider, textDecoder: new TextDecoder(), textEncoder: new TextEncoder() });

const fs = require('fs');
const wasmFilePath = "./dappservices/dappservices.wasm";
const abiFilePath = "./dappservices/dappservices.abi";

const wasmHexString = fs.readFileSync(wasmFilePath).toString('hex');

const buffer = new Serialize.SerialBuffer({
    textEncoder: api.textEncoder,
    textDecoder: api.textDecoder,
});

let abiJSON = JSON.parse(fs.readFileSync(abiFilePath, 'utf8'));
let abiDefinitions = api.abiTypes.get('abi_def');
abiJSON = abiDefinitions.fields.reduce(
    (acc, { name: fieldName }) =>
        Object.assign(acc, { [fieldName]: acc[fieldName] || [] }),
        abiJSON
    );
abiDefinitions.serialize(buffer, abiJSON);
const serializedAbiHexString = Buffer.from(buffer.asUint8Array()).toString('hex');

const actions = [
        {
          account: 'eosio',
          name: 'setcode',
          authorization: [
            {
              actor: 'dappservices',
              permission: 'active',
            },
          ],
          data: {
            account: 'dappservices',
            code: wasmHexString,
          vmtype: 0,
          vmversion: 0
          },
        },
        {
          account: 'eosio',
          name: 'setabi',
          authorization: [
            {
              actor: 'dappservices',
              permission: 'active',
            },
          ],
          data: {
            account: 'dappservices',
            abi: serializedAbiHexString,
          }
        },    
        {
          account: "dappservices",
          name: "updinflation",
          authorization: [
            {
              actor: "dappservices",
              permission: "active"
            }
          ],
          data: {
            inflation_per_block: 2.2159110624367184e-9
          }
        }
      ];

(async () => {
    try {
//   console.log(api)
//   api.cachedAbis = await api2.getCachedAbi("dappservices");
  console.log(api.cachedAbis);
  const serialized_actions = await api.serializeActions(actions)

  // BUILD THE MULTISIG PROPOSE TRANSACTION
  const proposeInput = {
    proposer: 'natdeveloper',
    proposal_name: 'updinflation',
    requested: [{"actor":"dappservices","permission":"active"}],
    trx: {
      expiration: '2021-07-29T23:11:48',
      ref_block_num: 22480,
      ref_block_prefix: 3659047377,
      max_net_usage_words: 0,
      max_cpu_usage_ms: 0,
      delay_sec: 0,
      context_free_actions: [],
      actions: serialized_actions,
      transaction_extensions: []
    }
  };

  //PROPOSE THE TRANSACTION
  const result = await api.transact({
    actions: [{
      account: 'eosio.msig',
      name: 'propose',
      authorization: [{
        actor: 'natdeveloper',
        permission: 'active',
      }],
      data: proposeInput,
    }]
  }, {
    blocksBehind: 3,
    expireSeconds: 30,
    broadcast: true,
    sign: true
  });
        
    } 
    catch(e) {
        console.log(e)
    }
})();

Mainnet

Last updated

Was this helpful?