UNPKG

@newcoin-foundation/newcoin-sdk

Version:
790 lines (628 loc) 29.1 kB
//import exp from 'constants'; //import { TransactResult } from 'eosjs/dist/eosjs-api-interfaces'; //import { isObjectBindingPattern } from 'typescript'; import { devnet_urls, devnet_services, NCO_BlockchainAPI } from '../../src'; import { //NCKeyPair, NCCreateUser, NCCreateCollection, NCCreatePool, NCCreatePermission, NCLinkPerm, NCStakeMainDao, NCCreateDao, NCCreateDaoProposal, NCCreateDaoUserWhitelistProposal, NCApproveDaoProposal, NCDaoProposalVote, NCDaoWithdrawVoteDeposit, NCExecuteDaoProposal, NCGetDaoProposals, NCGetVotes, NCStakePool, NCUnstakePool, NCMintAsset, NCTxNcoBal, //NCTxBal, NCGetAccInfo, NCReturnTxs, NCReturnInfo,NCGetDaoWhiteList, default_schema, SBT_NFT_schema, //NCBuyRam } from "../../src/types"; import { normalizeUsername } from '../../src/utils'; //import * as nco from 'newcoin'; let randomname= () => " ".repeat(9).split("").map(_ => String.fromCharCode(Math.floor(Math.random() * (122 - 97) + 97))).join("") + ".io" let name = randomname(); console.log(name); //defaults pre-generation let pub_key_active = "EOS8KnfBrVCvdWr1JXybAcMvz8NjqB3XLArEAzRm7wLJchWKw6NFM"; let prv_key_active = "5JLUzZYfMJUim4KPdGw1ipA8i4Std8QM4hunnvwaesqgRfWiD3j"; let pub_key_owner = "EOS6j3ATfMaBRM7DnGHqZ8Miqw4ah1awgtpbriq4zubfdhey9pcDx"; // @ts-ignore let prv_key_owner = "5JvR9dzATtTkPPDcUdNZzQ8Grp6w4eKJz4xqomCx9T7M9VCaQgN"; let pub_key_comm = "EOS5wzNPC5WM73cC3ScApobLgGABMuMSrdJB9b4RqZraGg3BEWnP9"; // @ts-ignore let prv_key_comm = "5J4twVpFc1dKsqUmcyvUZg5kQ1ofNTJAWZn5xPwsDGo6MkCRpZ2"; let pool_code: string; let dao_id: string = "160"; // @ts-ignore let io_vote_id: string = "100"; //@ts-ignore let wait = (t) => new Promise((res) => setTimeout(res, t)); const api = new NCO_BlockchainAPI( devnet_urls, devnet_services, true ); describe("Basic blockchain operations", () => { describe("test template", () => { it("test template", async () => { let resp = "test template shows tests are running" ; console.log(resp); return resp; }, 1000); }); describe.skip("custom test", () => { it("custom code", async () => { //let n: NCGetDaoProposals = { dao_owner: "testaaagt.io",] reverse: false } //const resp = await api.getDaoWhitelistProposals(n); //console.log(JSON.stringify(resp)); }, 15000); }); describe("create key pair", () => { it("key pair create", async () => { let resp = await api.createKeyPair(); console.log("Keys owner generated: \n Prv: %s \n Pub: %s\n", resp.prv_key, resp.pub_key); pub_key_owner = resp.pub_key; prv_key_owner = resp.prv_key; resp = await api.createKeyPair(); console.log("Keys active generated: \n Prv: %s \n Pub: %s\n", resp.prv_key, resp.pub_key); pub_key_active = resp.pub_key; prv_key_active = resp.prv_key; resp = await api.createKeyPair(); console.log("Keys comm generated: \n Prv: %s \n Pub: %s\n", resp.prv_key, resp.pub_key); pub_key_comm = resp.pub_key; prv_key_comm = resp.prv_key; return resp; }, 60000); }); describe("open account transaction", () => { it("create acc", async () => { let nco_struct : NCCreateUser = { newUser: name, newacc_pub_active_key: pub_key_active, newacc_pub_owner_key: pub_key_owner, payer: "io", payer_prv_key: "5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV", ram_amt : 8196, cpu_amount : "100.0000 NCO", net_amount : "100.0000 NCO", xfer : true, // stake or transfer CPU/NET to the account }; let resp : NCReturnTxs = await api.createUser(nco_struct) ; console.log(resp); expect(typeof resp.TxID_createAcc).toBe('string'); }, 30000) }); describe("create collection transaction", () => { it("create default generic user collection", async () => { let col = normalizeUsername(name, "z"); // name.replace(/\./g, 'z' + 'z'.repeat(d)); let sch = normalizeUsername(name, "w"); // name.replace(/\./g, 'w' + 'w'.repeat(d)); let tpn = normalizeUsername(name, "t"); // name.replace(/\./g, 't' + 't'.repeat(d)); let nco_struct : NCCreateCollection = { user: name, collection_name: col, schema_name: sch, schema_fields: default_schema, template_name: tpn, template_fields: [], user_prv_active_key: prv_key_active, allow_notify: true, mkt_fee : 0.05, xferable : true, burnable : true, max_supply : 0xffff }; let resp : NCReturnTxs = await api.createCollection(nco_struct); console.log(resp); expect(typeof resp.TxID_createCol).toBe('string'); expect(typeof resp.TxID_createSch).toBe('string'); //expect(typeof resp.TxID_createTpl).toBe('string'); }, 60000); it.skip("create special non-transf collection", async () => { let nco_struct : NCCreateCollection = { user: "io", user_prv_active_key: "5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV", collection_name:"sbtcollctn11", schema_name: "sbtschemaa11", schema_fields: SBT_NFT_schema, template_name: "-1", template_fields: [], allow_notify: true, mkt_fee : 0.00, xferable : false, burnable : false, max_supply : 0xffffff }; let resp : NCReturnTxs = await api.createCollection(nco_struct); console.log(resp); expect(typeof resp.TxID_createCol).toBe('string'); expect(typeof resp.TxID_createSch).toBe('string'); //expect(typeof resp.TxID_createTpl).toBe('string'); }, 60000); }); describe("create permission for an account under active", () => { it("create permission", async () => { let n: NCCreatePermission = { author: name, perm_name: 'nwpermission', author_prv_active_key: prv_key_active, perm_pub_key: pub_key_comm } ; console.log("creating permission %s for account %s", n.perm_name, n.author); let resp: NCReturnTxs = await api.createPermission(n); console.log(resp); expect(typeof resp.TxID_createPerm).toBe('string'); }, 60000); }); describe("link permission for an account under active", () => { it("link permission", async () => { let n: NCLinkPerm = { author: name, perm_to_link: 'nwpermission', author_prv_active_key: prv_key_active, action_owner: "atomicassets", action_to_link: "mintasset" // for an example } ; console.log("linking permission %s for account %s to trigger %s on %s", n.perm_to_link, n.author, n.action_to_link, n.action_owner); let resp: NCReturnTxs = await api.linkPermission(n); console.log(resp); expect(typeof resp.TxID_linkPerm).toBe('string'); }, 60000); }); describe("tx NCO transaction", () => { it("tx nco balance", async () => { let n: NCTxNcoBal = { to: name, amt: '1000.0000 NCO', payer:'io', memo: 'initial balance transfer', payer_prv_key: "5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV" }; let resp :NCReturnTxs = await api.txNCOBalance(n) ; console.log(resp); expect(typeof resp.TxID).toBe('string'); }, 60000) }); describe("'create pool' transaction", () => { it("create pool", async () => { let n: NCCreatePool = { owner: name, owner_prv_active_key: prv_key_active } ; let resp :NCReturnTxs = await api.createPool(n) ; console.log(resp); expect(typeof resp.TxID_createPool).toBe('string'); }, 60000) }); describe("stake to MainDAO pool transaction", () => { it("stake maindao pool", async () => { let n: NCStakeMainDao = { amt: '1000.0000 NCO', payer: name, payer_prv_key: prv_key_active } ; let resp : NCReturnTxs = await api.stakeMainDAO(n) ; console.log(resp); expect(typeof resp.TxID_stakeMainDAO).toBe('string'); }, 60000) }); describe("instant unstake MainDAO pool transaction", () => { it("unstake maindao pool", async () => { let n: NCStakeMainDao = { amt: '100.0000 GNCO', payer: name, payer_prv_key: prv_key_active } ; // check balance? let resp : NCReturnTxs = await api.instUnstakeMainDAO(n) ; console.log(resp); expect(typeof resp.TxID_unstakeMainDAO).toBe('string'); }, 60000) }); describe("delayed unstake MainDAO pool transaction", () => { it("delayed unstake maindao pool", async () => { let n: NCStakeMainDao = { amt: '100.0000 GNCO', payer: name, payer_prv_key: prv_key_active } ; let resp : NCReturnTxs = await api.dldUnstakeMainDAO(n) ; console.log(resp); expect(typeof resp.TxID_unstakeMainDAO).toBe('string'); }, 60000) }); describe("stake to pool transaction", () => { it("stake pool", async () => { let n: NCStakePool = { owner: name, amt: '100.0000 GNCO', payer: name,//'io', payer_prv_key: prv_key_active//"5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV" } ; let resp : NCReturnTxs = await api.stakePool(n) ; console.log(resp); pool_code = resp.pool_code as string; expect(pool_code).toBeDefined(); expect(typeof resp.TxID_stakePool).toBe('string'); }, 60000); }); describe("IO stake to pool transaction", () => { it("stake pool", async () => { let n: NCStakePool = { owner: name, amt: '100.0000 GNCO', payer: 'io', payer_prv_key: "5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV" } ; let resp : NCReturnTxs = await api.stakePool(n) ; console.log(resp); pool_code = resp.pool_code as string; expect(pool_code).toBeDefined(); expect(typeof resp.TxID_stakePool).toBe('string'); }, 60000); }); describe("unstake from pool transaction", () => { it("withdraw from pool", async () => { expect(pool_code).toBeDefined(); const n: NCUnstakePool = { amt: '5.0000 '+pool_code, payer: name, //"io", payer_prv_key: prv_key_active//"5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV"// } ; console.log("unstake action: "+ JSON.stringify(n)); let resp : NCReturnTxs = await api.unstakePool(n) ; console.log(resp); expect(typeof resp.TxID_unstakePool).toBe('string'); }, 60000) }); describe("'create dao' transaction", () => { it("create dao", async () => { let n: NCCreateDao = { author: name, author_prv_key: prv_key_active, descr: "test DAO by "+ name } ; let resp :NCReturnTxs = await api.createDao(n) ; console.log(resp); expect(typeof resp.TxID_createDao).toBe('string'); }, 60000) }); describe("'create whitelist proposal' transaction", () => { it("create whitelist proposal", async () => { let start = new Date(); let end = start; start = new Date(start.setSeconds(start.getSeconds() + 7)); end = new Date(end.setSeconds(end.getSeconds() + 27)); let n: NCCreateDaoUserWhitelistProposal = { proposer: name, proposer_prv_key: prv_key_active, dao_owner:name, vote_start: start.toISOString().slice(0,-5), //now.toISOString(), vote_end: end.toISOString().slice(0,-5), //new Date(now.getTime()+ 8*24*60*60*1000).toISOString() user: "io" } ; console.log("Arguments for whitelist user proposal creation : " + JSON.stringify(n)); let resp :NCReturnTxs = await api.createDaoUserWhitelistProposal(n) ; console.log(resp); expect(typeof resp.TxID_createDaoProposal).toBe('string'); // @ts-ignore dao_id = resp.dao_id.toString() ; // @ts-ignore expect(~~dao_id).toBeGreaterThan(0); }, 60000) }); describe("get whitelist proposal by ID", () => { it("get proposal by id", async () => { let n: NCGetDaoProposals = { proposal_id: "0", dao_id: dao_id }; console.log("Arguments for DAO proposal search: " + JSON.stringify(n)); let resp = await api.getDaoWhitelistProposal(n); console.log(JSON.stringify(resp)); console.log( "Quantities: " + " --- Vote YES: " + JSON.stringify(resp.rows[0].vote_yes) + " --- Vote NO: " + JSON.stringify(resp.rows[0].vote_no )); expect(resp.rows[0].id).toBe(0); }, 60000) }); describe("list whitelist proposals", () => { it("list whitelist proposals for dao", async () => { let n: NCGetDaoProposals = { dao_owner: name, //proposal_author: name }; //console.log("Arguments for DAO proposal list: " + JSON.stringify(n)); let resp = await api.listDaoWhitelistProposals(n); console.log("list of WL proposals " + JSON.stringify(resp)); // @ts-ignore expect(resp.list[0].id).toBe(0); }, 60000) }); describe("'approve whitelist proposal' transaction", () => { it("approve WL proposal", async () => { let n: NCApproveDaoProposal = { approver: name, approver_prv_key: prv_key_active, dao_owner: name, proposal_id: 0 }; console.log("Arguments for DAO proposal approval: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.approveDaoWhitelistProposal(n) ; console.log(resp); expect(typeof resp.TxID_approveDaoProposal).toBe('string'); }, 60000) }); describe("vote dao whitelist proposal transaction", () => { it("vote proposal",async () => { let n: NCDaoProposalVote = { voter: name, voter_prv_key: prv_key_active, dao_id: dao_id, proposal_id: "0", proposal_type: "whitelist", quantity: "3.1000 " + pool_code, option: "YES" }; console.log("Arguments for Voting whitelist: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.voteOnProposal(n) ; console.log(resp); expect(typeof resp.TxID_voteDaoProposal).toBe('string'); }, 30000); }); describe("'execute whitelist proposal' transaction", () => { it("execute whitelist proposal", async () => { console.log("waiting 40 sec .... "); await wait(40000); let n: NCExecuteDaoProposal = { exec: name, exec_prv_key: prv_key_active, dao_owner: name, proposal_id: 0 }; console.log("Arguments for WL proposal execution: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.executeDaoWhitelistProposal(n) ; console.log(resp); expect(typeof resp.TxID_executeDaoProposal).toBe('string'); }, 60000) }); describe("get whitelist by daoID", () => { it("get whitelist by daoid", async () => { let n: NCGetDaoWhiteList = { dao_id: dao_id }; console.log("Arguments for whitelist search: " + JSON.stringify(n)); let resp = await api.getDaoWhitelist(n); console.log(JSON.stringify(resp)); //expect(resp.rows[0].id).toBe(0); }, 60000) }); describe("'create dao proposal' transaction", () => { it("create dao proposal", async () => { let start = new Date(); let end = start; start = new Date(start.setSeconds(start.getSeconds() + 10)); end = new Date(end.setSeconds(start.getSeconds() + 20)); console.log("start vote: " + start); console.log("end vote: " + end); //end.setMinutes(start.getMinutes() + 1); let n: NCCreateDaoProposal = { proposer: name, proposer_prv_key: prv_key_active, dao_owner:name, title: "Latest news", summary: "Don't panic", url: "meduza.io", vote_start: start.toISOString().slice(0,-5), //now.toISOString(), vote_end: end.toISOString().slice(0,-5) //new Date(now.getTime()+ 8*24*60*60*1000).toISOString() } ; console.log("Arguments for DAO proposal creation : " + JSON.stringify(n)); let resp :NCReturnTxs = await api.createDaoProposal(n) ; console.log(resp); expect(typeof resp.TxID_createDaoProposal).toBe('string'); // @ts-ignore dao_id = resp.dao_id.toString() ; // @ts-ignore expect(~~dao_id).toBeGreaterThan(0); }, 60000) }); describe("'approve dao proposal' transaction", () => { it("approve dao proposal", async () => { let n: NCApproveDaoProposal = { approver: name, approver_prv_key: prv_key_active, dao_owner: name, proposal_id: 0 }; console.log("Arguments for DAO proposal approval: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.approveDaoProposal(n) ; console.log(resp); expect(typeof resp.TxID_approveDaoProposal).toBe('string'); }, 60000) }); describe("get DAO proposal by ID", () => { it("get proposal by id", async () => { let n: NCGetDaoProposals = { proposal_id: "0", dao_id: dao_id }; console.log("Arguments for DAO proposal search: " + JSON.stringify(n)); let resp = await api.getDaoProposal(n); console.log(JSON.stringify(resp)); console.log( "Quantities: " + " --- Vote YES: " + JSON.stringify(resp.rows[0].vote_yes) + " --- Vote NO: " + JSON.stringify(resp.rows[0].vote_no )); expect(resp.rows[0].id).toBe(0); }, 60000) }); describe("list proposals", () => { it("list proposals for dao", async () => { let n: NCGetDaoProposals = { dao_owner: name }; //console.log("Arguments for DAO proposal list: " + JSON.stringify(n)); let resp = await api.listDaoProposals(n); console.log("list of DAO proposals " + JSON.stringify(resp)); // @ts-ignore expect(resp.list[0].id).toBe(0); }, 60000) }); describe("vote dao proposal transaction", () => { it("vote DAO proposal",async () => { let n: NCDaoProposalVote = { voter: name, voter_prv_key: prv_key_active, dao_id: dao_id, proposal_id: "0", proposal_type: "standart", quantity: "2.1000 " + pool_code, option: "YES" }; console.log("Arguments for Voting: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.voteOnProposal(n) ; console.log(resp); expect(typeof resp.TxID_voteDaoProposal).toBe('string'); }, 45000); }); describe(" whitelisted IO vote dao proposal transaction", () => { it("IO vote proposal",async () => { let n: NCDaoProposalVote = { voter: "io", voter_prv_key: "5KdRwMUrkFssK2nUXASnhzjsN1rNNiy8bXAJoHYbBgJMLzjiXHV", dao_id: dao_id, proposal_id: "0", proposal_type: "standart", quantity: "2.5000 " + pool_code, option: "NO" }; console.log("Arguments for Voting: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.voteOnProposal(n) ; console.log(resp); expect(typeof resp.TxID_voteDaoProposal).toBe('string'); }, 45000); }); describe("'execute dao proposal' transaction", () => { it("execute dao proposal", async () => { console.log("waiting 25 sec .... "); await wait(25000); let n: NCExecuteDaoProposal = { exec: name, exec_prv_key: prv_key_active, dao_owner: name, proposal_id: 0 }; console.log("Arguments for DAO proposal execution: " + JSON.stringify(n)); let resp :NCReturnTxs = await api.executeDaoProposal(n) ; console.log(resp); expect(typeof resp.TxID_executeDaoProposal).toBe('string'); }, 60000) }); // ================= minting ================================================== describe("mint ERC721 asset", () => { it("Mint asset", async () => { let test = "1".repeat(64); let n: NCMintAsset = { creator: name, payer: name, payer_prv_key: prv_key_active, immutable_data: [ {'key': 'name', 'value': ['string', name+'_'+(new Date()).getTime()]}, {'key': 'description','value': ['string', 'demo nft']}, {'key': 'image','value': ['string', 'https://storage.googleapis.com/opensea-prod.appspot.com/creature/50.png']}, {'key': "external_url",'value':['string', '']}, {'key': 'content_type','value':['string', 'text']}, {'key': 'content','value':['string', test]}, {'key': "license",'value':['string', 'CC-EX-123456']}, //{'key': "template_name"}, {'value': ['string', '']}, //{'key': "attributes"}, { 'value': ['string[]', []] } ], mutable_data: [ //{'key': 'storage', 'value': ['string', test]} ] }; let resp :NCReturnTxs = await api.mintAsset(n) ; console.log(resp); expect(typeof resp.TxID_mintAsset).toBe('string'); }, 60000); it("Mint SBT", async () => { //let test = "1".repeat(64); let n: NCMintAsset = { creator: name, //col_name: "sbtcollctn11", sch_name: normalizeUsername(name, "s"), payer: name, payer_prv_key: prv_key_active, immutable_data: [ {'key': 'name', 'value': ['string', name+'_'+(new Date()).getTime()]}, {'key': 'description','value': ['string', 'demo nft']}, {'key': 'image','value': ['string', 'https://storage.googleapis.com/opensea-prod.appspot.com/creature/50.png']}, { 'key': 'type', 'value':['string', 'non transferable SBT'] }, { 'key': 'issuer', 'value': ['string', 'io'] }, { 'key': 'recipient','value': ['string', name] }, { 'key': 'quantifiers','value': ['string', ''] }, { 'key': 'signature', 'value': ['string', 'SIG_example'] }, { 'key': 'content', 'value': ['string', 'example JSON here'] }, { 'key': 'version', 'value': ['string', '1.0']} ], mutable_data: [ //{'key': 'storage', 'value': ['string', test]} ] }; let resp :NCReturnTxs = await api.mintAsset(n) ; console.log(resp); expect(typeof resp.TxID_mintAsset).toBe('string'); }, 60000); }); //jest.retryTimes(3); describe("get DAO whitelist", () => { it("get dao whitelist", async () => { let n: NCGetDaoWhiteList = { dao_id: "97" }; let resp = await api.getDaoWhitelist(n); console.log(JSON.stringify(resp)); expect(resp.rows.length).toBe(2); }, 60000) }); describe("list votes", () => { it("list votes for a proposer", async () => { let n: NCGetVotes = { voter: "testaaagt.io", lower_bound: "2", limit: "12" }; console.log("Arguments for DAO votes list: " + JSON.stringify(n)); let resp = await api.getVotes(n); console.log("Answer" + JSON.stringify(resp)); //console.log("Quantity field: " + JSON.stringify(resp.rows[0].quantity)); expect(resp.rows[0].id).toBe(0); }, 60000) }); describe("get vote deposit back", () => { it("vote deposit back", async () => { let n: NCDaoWithdrawVoteDeposit = { voter: name, voter_prv_key: prv_key_active, vote_id: "0", }; console.log("Arguments for get vote depost back : " + JSON.stringify(n)); let resp = await api.withdrawVoteDeposit(n); //console.log("Answer" + JSON.stringify(resp)); //console.log("Quantity field: " + JSON.stringify(resp.rows[0].quantity)); expect(typeof resp.TxID_WithdrawVoteDeposit).toBe('string'); }, 60000) }); describe("get account pools balances", () => { it("get pool balances", async () => { let n: NCGetAccInfo = { owner: 'io', contract: 'pools2.nco' } ; let resp:NCReturnInfo = { acc_balances: [] } resp = await api.getAccountBalance(n) as NCReturnInfo ; console.log("NEW POOL COINS" + JSON.stringify(resp)); n.contract = "pool.nco"; resp = await api.getAccountBalance(n) as NCReturnInfo ; console.log("GNCO balance" + JSON.stringify(resp)); if(resp.acc_balances) expect(typeof resp.acc_balances[0]).toBe('string'); else expect(false).toBe(true); }, 60000) }); });