Skip to content

Commit

Permalink
- kusd wrapper
Browse files Browse the repository at this point in the history
- bump version
  • Loading branch information
anonymoussprocket committed Feb 15, 2021
1 parent f1c30e4 commit 2b3b38a
Show file tree
Hide file tree
Showing 6 changed files with 156 additions and 2 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "conseiljs",
"version": "5.0.7-1",
"version": "5.0.7-2",
"description": "Client-side library for Tezos dApp development.",
"browser": "dist/index-web.js",
"main": "dist/index.js",
Expand Down
141 changes: 141 additions & 0 deletions src/chain/tezos/contracts/KolibriTokenHelper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import { JSONPath } from 'jsonpath-plus';

import { KeyStore, Signer } from '../../../types/ExternalInterfaces';
import * as TezosTypes from '../../../types/tezos/TezosChainTypes';
import { TezosConstants } from '../../../types/tezos/TezosConstants';
import { TezosMessageUtils } from '../TezosMessageUtil';
import { TezosNodeReader } from '../TezosNodeReader';
import { TezosNodeWriter } from '../TezosNodeWriter';
import { TezosContractUtils } from './TezosContractUtils';

/**
*
*/
export namespace KolibriTokenHelper {
/**
* Gets the contract code at the specified address at the head block and compares it to the known hash of the code. This function processes Micheline format contracts.
*
*
* @param server Destination Tezos node.
* @param address Contract address to query.
*/
export async function verifyDestination(server: string, address: string): Promise<boolean> {
return TezosContractUtils.verifyDestination(server, address, '0e3e137841a959521324b4ce20ca2df7');
}

/**
* In contrast to verifyDestination, this function uses compares Michelson hashes.
*
* @param script
*/
export function verifyScript(script: string): boolean {
return TezosContractUtils.verifyScript(script, 'b77ada691b1d630622bea243696c84d7');
}

export async function getAccountBalance(server: string, mapid: number, account: string): Promise<number> {
const packedKey = TezosMessageUtils.encodeBigMapKey(Buffer.from(TezosMessageUtils.writePackedData(account, 'address'), 'hex'));
const mapResult = await TezosNodeReader.getValueForBigMapKey(server, mapid, packedKey);

if (mapResult === undefined) { throw new Error(`Map ${mapid} does not contain a record for ${account}`); }

const jsonresult = JSONPath({ path: '$.args[1].int', json: mapResult });
return Number(jsonresult[0]);
}

export async function getAccountAllowance(server: string, mapid: number, account: string, source: string) {
const packedKey = TezosMessageUtils.encodeBigMapKey(Buffer.from(TezosMessageUtils.writePackedData(source, 'address'), 'hex'));
const mapResult = await TezosNodeReader.getValueForBigMapKey(server, mapid, packedKey);

if (mapResult === undefined) { throw new Error(`Map ${mapid} does not contain a record for ${source}/${account}`); }

let allowances = new Map<string, number>();
JSONPath({ path: '$.args[1][*].args', json: mapResult }).forEach(v => allowances[v[0]['string']] = Number(v[1]['int']));

return allowances[account];
}

export async function getSimpleStorage(server: string, address: string): Promise<{mapid: number, supply: number, administrator: string, paused: boolean}> {
const storageResult = await TezosNodeReader.getContractStorage(server, address);

return {
mapid: Number(JSONPath({ path: '$.args[0].args[0].args[1].int', json: storageResult })[0]),
supply: Number(JSONPath({ path: '$.args[3].int', json: storageResult })[0]),
administrator: JSONPath({ path: '$.args[0].args[0].args[0].string', json: storageResult })[0],
paused: (JSONPath({ path: '$.args[1].args[1].prim', json: storageResult })[0]).toString().toLowerCase().startsWith('t')
};
}

export async function getTokenSupply(server: string, address: string): Promise<number> {
const storageResult = await TezosNodeReader.getContractStorage(server, address);

return Number(JSONPath({ path: '$.args[3].int', json: storageResult })[0]);
}

export async function getAdministrator(server: string, address: string): Promise<string> {
const storageResult = await TezosNodeReader.getContractStorage(server, address);

return JSONPath({ path: '$.args[1].string', json: storageResult })[0];
}

export async function getPaused(server: string, address: string): Promise<boolean> {
const storageResult = await TezosNodeReader.getContractStorage(server, address);

return (JSONPath({ path: '$.args[2].prim', json: storageResult })[0]).toString().toLowerCase().startsWith('t');
}

export async function transferBalance(server: string, signer: Signer, keystore: KeyStore, contract: string, fee: number, source: string, destination: string, amount: number, gas: number, freight: number) {
const parameters = `(Left (Left (Left (Pair "${source}" (Pair "${destination}" ${amount})))))`;

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}

export async function approveBalance(server: string, signer: Signer, keystore: KeyStore, contract: string, fee: number, destination: string, amount: number, gas: number, freight: number) {
const parameters = `(Left (Left (Right (Pair "${destination}" ${amount}))))`;

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}

export async function activateLedger(server: string, signer: Signer, keystore: KeyStore, contract: string, fee: number, gas: number, freight: number) {
const parameters = '(Right (Left (Left False)))';

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}

export async function deactivateLedger(server: string, signer: Signer, keystore: KeyStore, contract: string, fee: number, gas: number, freight: number) {
const parameters = '(Right (Left (Left True)))';

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}

export async function setAdministrator(server: string, signer: Signer, keystore: KeyStore, contract: string, address: string, fee: number, gas: number, freight: number) {
const parameters = `(Right (Left (Right "${address}")))`;

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}

export async function mint(server: string, signer: Signer, keystore: KeyStore, contract: string, fee: number, destination: string, amount: number, gas: number = 150_000, freight: number = 5_000) {
const parameters = `(Right (Right (Right (Left (Pair "${destination}" ${amount})))))`;

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}

export async function burn(server: string, signer: Signer, keystore: KeyStore, contract: string, fee: number, source: string, amount: number, gas: number, freight: number) {
const parameters = `(Right (Right (Right (Right (Pair "${source}" ${amount})))))`;

const nodeResult = await TezosNodeWriter.sendContractInvocationOperation(server, signer, keystore, contract, 0, fee, freight, gas, '', parameters, TezosTypes.TezosParameterFormat.Michelson, TezosConstants.HeadBranchOffset, true);

return TezosContractUtils.clearRPCOperationGroupHash(nodeResult.operationGroupID);
}
}
1 change: 1 addition & 0 deletions src/index-web.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export * from './chain/tezos/contracts/TezosContractUtils';
export * from './chain/tezos/contracts/BabylonDelegationHelper';
export * from './chain/tezos/contracts/CryptonomicNameServiceHelper';
export * from './chain/tezos/contracts/DexterPoolHelper';
export * from './chain/tezos/contracts/KolibriTokenHelper';
export * from './chain/tezos/contracts/MurbardMultisigHelper';
export * from './chain/tezos/contracts/StakerDAOTokenHelper';
export * from './chain/tezos/contracts/TCFBakerRegistryHelper';
Expand Down
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export * from './chain/tezos/contracts/TezosContractUtils';
export * from './chain/tezos/contracts/BabylonDelegationHelper';
export * from './chain/tezos/contracts/CryptonomicNameServiceHelper';
export * from './chain/tezos/contracts/DexterPoolHelper';
export * from './chain/tezos/contracts/KolibriTokenHelper';
export * from './chain/tezos/contracts/MurbardMultisigHelper';
export * from './chain/tezos/contracts/StakerDAOTokenHelper';
export * from './chain/tezos/contracts/TCFBakerRegistryHelper';
Expand Down
11 changes: 11 additions & 0 deletions test/chain/tezos/TezosMessageCodec.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,17 @@ describe("Tezos P2P message encoder test suite", () => {
expect(result).to.equal("6d0069ef8fb5d47d8a4321c94576a2316a632be8ce89904e09924e914e934e000000003702000000320500035b0501035b0502020000002303160743035b00010312074303690a000000080123456789abcdef0320053d036d034200000002001e");
});

it("correctly encode an activation operation", () => {
let activation: Activation = {
kind: "activate_account",
pkh: "tz1erMkoyqZBRvhuFoxHRnn8s7EpgTT63HHD",
secret: "912eb565c0194949644c4ef8888ad547aaf28154"
};

let result = TezosMessageCodec.encodeOperation(activation);
expect(result).to.equal("6d0069ef8fb5d47d8a4321c94576a2316a632be8ce89904e09924e914e934e000000003702000000320500035b0501035b0502020000002303160743035b00010312074303690a000000080123456789abcdef0320053d036d034200000002001e");
});

it("correctly encode a contract origination operation", () => {
let origination: Origination = {
kind: "origination",
Expand Down

0 comments on commit 2b3b38a

Please sign in to comment.