Skip to content

Instantly share code, notes, and snippets.

@wangshijun
Created June 28, 2021 03:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wangshijun/70cf54686e062f4e654077ce7de00f48 to your computer and use it in GitHub Desktop.
Save wangshijun/70cf54686e062f4e654077ce7de00f48 to your computer and use it in GitHub Desktop.
Persis data on ArcBlock blockchain

Create a simple js app that has @ocap/client and @ocap/wallet as dependency.

Then create a file called asset.js with following content:

const GraphqlClient = require('@ocap/client');
const { fromRandom } = require('@ocap/wallet');

const endpoint = 'https://beta.abtnetwork.io';

const client = new GraphqlClient(`${endpoint}/api/`);
const sleep = (timeout) => new Promise((resolve) => setTimeout(resolve, timeout));

(async () => {
  try {
    const owner = fromRandom();
    console.log({ owner: owner.toAddress() });

    // 1. declare owner
    let hash = await client.declare({ moniker: 'owner', wallet: owner });
    console.log('declare.owner.result', hash);
    console.log('view owner account', `${endpoint}/explorer/accounts/${owner.toAddress()}`);

    // 2. create asset for owner
    let assetAddress;
    // eslint-disable-next-line prefer-const
    [hash, assetAddress] = await client.createAsset({
      moniker: 'asset',
      readonly: false, // if we want to update the asset, we should set this to false
      transferrable: false,
      data: {
        type: 'json',
        value: {
          key: 'value',
          sn: Math.random(),
        },
      },
      wallet: owner,
    });
    console.log('view asset state', `${endpoint}/explorer/assets/${assetAddress}`);
    console.log('create asset tx', `${endpoint}/explorer/txs/${hash}`);

    // wait for asset state consolidates
    await sleep(5000);

    // 3. read asset
    const { state } = await client.getAssetState({ address: assetAddress });
    console.log('asset state', state);

    // 4. update asset
    hash = await client.updateAsset({
      address: assetAddress,
      moniker: 'asset_updated',
      data: {
        type: 'json',
        value: {
          key: 'value updated',
          sn: Math.random(),
        },
      },
      wallet: owner,
    });
    console.log('view asset state', `${endpoint}/explorer/assets/${assetAddress}`);
    console.log('update asset tx', `${endpoint}/explorer/txs/${hash}`);
  } catch (err) {
    console.error(err);
    console.log(JSON.stringify(err.errors));
  }
})();

After you run this script, go to https://beta.abtnetwork.io for the explorer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment