external_call.spec.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import expect from 'expect';
  2. import { gasLimit, createConnection, deploy, transaction, aliceKeypair, } from './index';
  3. import { ContractPromise } from '@polkadot/api-contract';
  4. import { ApiPromise } from '@polkadot/api';
  5. describe('Deploy external_call contract and test', () => {
  6. let conn: ApiPromise;
  7. before(async function () {
  8. conn = await createConnection();
  9. });
  10. after(async function () {
  11. await conn.disconnect();
  12. });
  13. it('external_call', async function () {
  14. this.timeout(100000);
  15. const alice = aliceKeypair();
  16. // call the constructors
  17. let caller_res = await deploy(conn, alice, 'caller.contract', BigInt(0));
  18. let caller_contract = new ContractPromise(conn, caller_res.abi, caller_res.address);
  19. let callee_res = await deploy(conn, alice, 'callee.contract', BigInt(0));
  20. let callee_contract = new ContractPromise(conn, callee_res.abi, callee_res.address);
  21. let callee2_res = await deploy(conn, alice, 'callee2.contract', BigInt(0));
  22. let callee2_contract = new ContractPromise(conn, callee2_res.abi, callee2_res.address);
  23. let tx1 = callee_contract.tx.setX({ gasLimit }, 102);
  24. await transaction(tx1, alice);
  25. let res1 = await callee_contract.query.getX(alice.address, {});
  26. expect(res1.output?.toJSON()).toStrictEqual(102);
  27. let res2 = await caller_contract.query.whoAmI(alice.address, {});
  28. expect(res2.output?.toString()).toEqual(caller_res.address.toString());
  29. let tx2 = caller_contract.tx.doCall({ gasLimit }, callee_contract.address, 13123);
  30. await transaction(tx2, alice);
  31. let res3 = await callee_contract.query.getX(alice.address, {});
  32. expect(res3.output?.toJSON()).toStrictEqual(13123);
  33. let res4 = await caller_contract.query.doCall2(alice.address, {}, callee_contract.address, 20000);
  34. expect(res4.output?.toJSON()).toStrictEqual(33123);
  35. let res5 = await caller_contract.query.doCall3(alice.address, {}, callee_contract.address, callee2_contract.address, [3, 5, 7, 9], "yo");
  36. expect(res5.output?.toJSON()).toEqual([24, "my name is callee"]);
  37. let res6 = await caller_contract.query.doCall4(alice.address, {}, callee_contract.address, callee2_contract.address, [1, 2, 3, 4], "asda");
  38. expect(res6.output?.toJSON()).toEqual([10, "x:asda"]);
  39. });
  40. });