Skip to content

Instantly share code, notes, and snippets.

@anonymoussprocket
Last active November 11, 2020 05:10
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 anonymoussprocket/380e11bd67aa8d0ee158c1877a5f4090 to your computer and use it in GitHub Desktop.
Save anonymoussprocket/380e11bd67aa8d0ee158c1877a5f4090 to your computer and use it in GitHub Desktop.
TZIP-7/FA1.2 token sample #87651
import fetch from 'node-fetch';
import * as log from 'loglevel';
import { registerFetch, registerLogger } from 'conseiljs';
import { KeyStore, TezosConseilClient, TezosMessageUtils, TezosNodeReader, OperationKindType, TezosNodeWriter, TezosParameterFormat, Signer, TezosContractIntrospector, Tzip7ReferenceTokenHelper } from 'conseiljs';
import { KeyStoreUtils, SoftSigner } from 'conseiljs-softsigner';
const tezosNode = 'TEZOS NODE';
const conseilServer = { url: 'CONSEIL SERVICE', apiKey: 'APIKEY FROM nautilus.cloud', network: 'carthagenet' };
const networkBlockTime = 30 + 1;
let accounts = ['tz1aTPZXhAmKmisY2iRe6dEhxwe7Db3cPoVc', 'tz1esJd77NiytsZu5M73kHY9hCZf2jhxCf93', 'tz1TeLvXDXAVu4QUsz5TxtQQ73APgQd8vGUv'];
let actors = { admin: {} as KeyStore, usera: {} as KeyStore, userb: {} as KeyStore, userc: {} as KeyStore };
let contractAddress = 'KT1XRdGrCkcWiiNcAb8jnbV8zyNctf62N1N1';
let contractMap = 10101;
function clearRPCOperationGroupHash(hash: string) {
return hash.replace(/\"/g, '').replace(/\n/, '');
}
async function statOperation(groupid: string){
const result = await TezosConseilClient.awaitOperationConfirmation(conseilServer, conseilServer.network, groupid, 7, networkBlockTime);
if (result['status'] === 'failed') {
console.log(`${result['kind']} ${groupid} ${result['status']} at block ${result['block_level']}`);
} else if (result['status'] === 'applied') {
let message = `${result['kind']} ${groupid} included in block ${result['block_level']} for ${result['consumed_gas']}g and ${result['paid_storage_size_diff']}f`
if ('originated_contracts' in result && result['originated_contracts'] != null && result['originated_contracts'].length > 0) {
message += ` new contract at ${result['originated_contracts']}`;
}
console.log(message);
} else {
console.log(JSON.stringify(result));
}
}
function init(){
const logger = log.getLogger('conseiljs');
logger.setLevel('debug', false);
registerLogger(logger);
registerFetch(fetch);
}
async function loadAccounts() {
console.log('~~ loadAccounts');
actors.admin = await KeyStoreUtils.restoreIdentityFromSecretKey('edskS4t6wC6eCSzVmfpwPAaABCAPYVZ7g3cVRYyqdY9hHSbBviav1gbMgFHZPW6ftFd1gY5nN2PyfabeY8dm4pDTmqVyDt49Cx');
actors.usera = await KeyStoreUtils.restoreIdentityFromSecretKey('edskS6T1fDhAXYZyJzTSXTBigT1yAsqBZmmMorQfhsuybW2DCi4SJkTSR9GyrTstDerVeUnTP6ZZoAGW7fCV8nJK9jbrYiK7iH');
actors.userb = await KeyStoreUtils.restoreIdentityFromSecretKey('edskSB9Pds3oqtiUfsS5fADJRWAVeQQSggkyvwJunrVBPZhTFnHi1dAgmjn1XkxfCcqLwpnhQFe2wcxpXdHheVGaSvt2Bf4m38');
}
async function queryContractMap(mapid: number, key: string, type: string = 'string') {
const packedKey = TezosMessageUtils.encodeBigMapKey(Buffer.from(TezosMessageUtils.writePackedData(key, type), 'hex'));
const mapResult = await TezosNodeReader.getValueForBigMapKey(tezosNode, mapid, packedKey);
console.log(`value: ${JSON.stringify(mapResult)}`);
}
async function run() {
await loadAccounts();
let operationGroupID = '';
let keyStore = actors.admin;
console.log(`actor "${keyStore.publicKeyHash}"`);
let signer: Signer = await SoftSigner.createSigner(TezosMessageUtils.writeKeyWithHint(keyStore.secretKey, 'edsk'));
//operationGroupID = await Tzip7ReferenceTokenHelper.deployContract(tezosNode, signer, keyStore, 500_000, keyStore.publicKeyHash);
//console.log(`deploy: ${operationGroupID}`); // ooogdgMbGtXYxvzo3SRHQ33GRMKKwcn4eif8zpq9woxcL4BT1X2
//statOperation(clearRPCOperationGroupHash(operationGroupID));
console.log(`contract: ${contractAddress}`);
console.log(`contract map: ${contractMap}`);
//operationGroupID = await Tzip7ReferenceTokenHelper.mint(tezosNode, signer, keyStore, contractAddress, 500_000, actors.usera.publicKeyHash, 10_000_000);
//console.log(`mint to ${actors.usera.publicKeyHash}: ${operationGroupID}`);
//statOperation(clearRPCOperationGroupHash(operationGroupID)); //op7zAnu5z16haMX1nvnyLzyMHKrysE5iKjh62ed4XWvY9EhLM15
//operationGroupID = await Tzip7ReferenceTokenHelper.activateLedger(tezosNode, signer, keyStore, contractAddress, 500_000, 250_000, 3_000);
//console.log(`activate: ${operationGroupID}`);
//statOperation(clearRPCOperationGroupHash(operationGroupID)); //opWXvDLKw7Z7hQQacNSgty9Wt4NfcnUSVBTWboCm9ETJMaYMhHz
//keyStore = actors.usera;
//console.log(`actor "${keyStore.publicKeyHash}"`);
//signer = await SoftSigner.createSigner(TezosMessageUtils.writeKeyWithHint(keyStore.secretKey, 'edsk'));
//operationGroupID = await Tzip7ReferenceTokenHelper.transferBalance(tezosNode, signer, keyStore, contractAddress, 500_000, keyStore.publicKeyHash, 'tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb', 1_000_000, 250_000, 3_000);
//console.log(`transfer from ${keyStore.publicKeyHash} to tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb: ${operationGroupID}`);
//statOperation(clearRPCOperationGroupHash(operationGroupID)); //oo42D1bkw5CbvarP9YK4YskfVLf6hingKtkKzvyqNLLjJpmPjCJ
//keyStore = actors.usera;
//console.log(`actor "${keyStore.publicKeyHash}"`);
//signer = await SoftSigner.createSigner(TezosMessageUtils.writeKeyWithHint(keyStore.secretKey, 'edsk'));
//operationGroupID = await Tzip7ReferenceTokenHelper.approveBalance(tezosNode, signer, keyStore, contractAddress, 500_000, 'tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb', 1_000_000, 250_000, 3_000);
//console.log(`approveBalance from ${keyStore.publicKeyHash} to tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb: ${operationGroupID}`);
//statOperation(clearRPCOperationGroupHash(operationGroupID)); //oo6wRN62iejBYxPfeqQu7FJAZjQPUwje2DtcN4DNto1EQSwNNzk
//keyStore = actors.usera;
//console.log(`actor "${keyStore.publicKeyHash}"`);
//signer = await SoftSigner.createSigner(TezosMessageUtils.writeKeyWithHint(keyStore.secretKey, 'edsk'));
//operationGroupID = await Tzip7ReferenceTokenHelper.approveBalance(tezosNode, signer, keyStore, contractAddress, 500_000, actors.userb.publicKeyHash, 1_000_000, 250_000, 3_000);
//console.log(`approveBalance from ${keyStore.publicKeyHash} to ${actors.userb.publicKeyHash}: ${operationGroupID}`);
//statOperation(clearRPCOperationGroupHash(operationGroupID)); //opNnkHXi1MuvXCBPRpuPuAMgSZDSYVbofpNRA1K7wiwwiiFvCPP
//keyStore = actors.userb;
//console.log(`actor "${keyStore.publicKeyHash}"`);
//signer = await SoftSigner.createSigner(TezosMessageUtils.writeKeyWithHint(keyStore.secretKey, 'edsk'));
//operationGroupID = await Tzip7ReferenceTokenHelper.transferBalance(tezosNode, signer, keyStore, contractAddress, 500_000, actors.usera.publicKeyHash, keyStore.publicKeyHash, 1_000_000, 250_000, 3_000);
//console.log(`claim from ${actors.usera.publicKeyHash} to ${keyStore.publicKeyHash}: ${operationGroupID}`);
//statOperation(clearRPCOperationGroupHash(operationGroupID)); //onhgUxJu95RXFStpA8EzgdDZNGHw4PQVGb8rue2dn2hbX2ndA7H
console.log(`contract storage:\n${JSON.stringify(await Tzip7ReferenceTokenHelper.getSimpleStorage(tezosNode, contractAddress), null, 2)}`);
/*
{
"mapid": 10101,
"supply": 10000000,
"administrator": "tz1aTPZXhAmKmisY2iRe6dEhxwe7Db3cPoVc",
"paused": false
}
*/
console.log(`balance for ${actors.usera.publicKeyHash}: ${await Tzip7ReferenceTokenHelper.getAccountBalance(tezosNode, contractMap, actors.usera.publicKeyHash)}`);
//8000000
console.log(`balance for ${actors.userb.publicKeyHash}: ${await Tzip7ReferenceTokenHelper.getAccountBalance(tezosNode, contractMap, actors.userb.publicKeyHash)}`);
//1000000
console.log(`balance for tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb: ${await Tzip7ReferenceTokenHelper.getAccountBalance(tezosNode, contractMap, 'tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb')}`);
//1000000
console.log(`allowance for tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb from ${actors.usera.publicKeyHash}: ${await Tzip7ReferenceTokenHelper.getAccountAllowance(tezosNode, contractMap, 'tz1e4hAp7xpjekmXnYe4677ELGA3UxR79EFb', actors.usera.publicKeyHash)}`);
//1000000
}
init();
run();
{
"name": "fa12-token-example",
"version": "0.0.1",
"description": "TZIP-7/FA1.2 token example script",
"scripts": {
"postinstall": "npm run build",
"build": "tsc index.ts",
"start": "node index.js"
},
"license": "UNLICENSED",
"engines": {
"node": ">=12.13.x",
"npm": ">=6.13.x"
},
"homepage": "https://gist.github.com/anonymoussprocket",
"dependencies": {
"conseiljs": "5.0.5",
"conseiljs-softsigner": "5.0.3
"loglevel": "1.6.8",
"node-fetch": "2.6.0"
},
"devDependencies": {
"typescript": "3.8.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment