external_call.spec.ts 2.6 KB

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