From a00cf4e6318e0dcda72725995653011c545e13ff Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 1 Jul 2020 16:34:08 -0400 Subject: embed mc lib into genesis --- examples/multicoin/mc_test.sol | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 examples/multicoin/mc_test.sol (limited to 'examples/multicoin/mc_test.sol') diff --git a/examples/multicoin/mc_test.sol b/examples/multicoin/mc_test.sol new file mode 100644 index 0000000..031cba0 --- /dev/null +++ b/examples/multicoin/mc_test.sol @@ -0,0 +1,18 @@ +pragma solidity >=0.6.0; + +contract MCTest { + address constant MultiCoin = 0x0100000000000000000000000000000000000000; + constructor() public { + // enable multi-coin functionality (it is disabled by default) + (bool success,) = MultiCoin.delegatecall(abi.encodeWithSignature("enableMultiCoin()")); + require(success); + } + + function getBalance(uint256 coinid) public returns (uint256) { + (bool success, bytes memory data) = MultiCoin.delegatecall(abi.encodeWithSignature("getBalance(uint256)", coinid)); + require(success); + return abi.decode(data, (uint256)); + } + + function deposit() public payable {} +} -- cgit v1.2.3 From 2d396b3c69a26e4096ccb376c012911d299c68c7 Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 1 Jul 2020 17:29:39 -0400 Subject: make sure getBalance() works --- examples/multicoin/mc_test.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'examples/multicoin/mc_test.sol') diff --git a/examples/multicoin/mc_test.sol b/examples/multicoin/mc_test.sol index 031cba0..a7d468e 100644 --- a/examples/multicoin/mc_test.sol +++ b/examples/multicoin/mc_test.sol @@ -2,16 +2,17 @@ pragma solidity >=0.6.0; contract MCTest { address constant MultiCoin = 0x0100000000000000000000000000000000000000; + uint256 balance; constructor() public { // enable multi-coin functionality (it is disabled by default) (bool success,) = MultiCoin.delegatecall(abi.encodeWithSignature("enableMultiCoin()")); require(success); } - function getBalance(uint256 coinid) public returns (uint256) { + function updateBalance(uint256 coinid) public { (bool success, bytes memory data) = MultiCoin.delegatecall(abi.encodeWithSignature("getBalance(uint256)", coinid)); require(success); - return abi.decode(data, (uint256)); + balance = abi.decode(data, (uint256)); } function deposit() public payable {} -- cgit v1.2.3 From ca6847998d867dc5d66e76a03bda9c72ae8d287b Mon Sep 17 00:00:00 2001 From: Determinant Date: Thu, 2 Jul 2020 01:36:18 -0400 Subject: make MultiCoin.transfer work --- examples/multicoin/mc_test.sol | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'examples/multicoin/mc_test.sol') diff --git a/examples/multicoin/mc_test.sol b/examples/multicoin/mc_test.sol index a7d468e..bfd42a5 100644 --- a/examples/multicoin/mc_test.sol +++ b/examples/multicoin/mc_test.sol @@ -16,4 +16,12 @@ contract MCTest { } function deposit() public payable {} + + function withdraw(uint256 amount, uint256 coinid, uint256 amount2) public { + (bool success,) = MultiCoin.delegatecall( + abi.encodeWithSignature("transfer(address,uint256,uint256,uint256)", + msg.sender, amount, coinid, amount2)); + + require(success); + } } -- cgit v1.2.3 From 1f49826de2bb8bb4f5f99f69fd2beb039b1172d9 Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 29 Jul 2020 12:01:05 -0400 Subject: clean up --- examples/multicoin/mc_test.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'examples/multicoin/mc_test.sol') diff --git a/examples/multicoin/mc_test.sol b/examples/multicoin/mc_test.sol index bfd42a5..ec07ee6 100644 --- a/examples/multicoin/mc_test.sol +++ b/examples/multicoin/mc_test.sol @@ -5,23 +5,23 @@ contract MCTest { uint256 balance; constructor() public { // enable multi-coin functionality (it is disabled by default) - (bool success,) = MultiCoin.delegatecall(abi.encodeWithSignature("enableMultiCoin()")); + (bool success,) = MultiCoin.call(abi.encodeWithSignature("enableMultiCoin()")); require(success); } function updateBalance(uint256 coinid) public { - (bool success, bytes memory data) = MultiCoin.delegatecall(abi.encodeWithSignature("getBalance(uint256)", coinid)); + (bool success, bytes memory data) = MultiCoin.call(abi.encodeWithSignature("getBalance(uint256)", coinid)); require(success); balance = abi.decode(data, (uint256)); } - function deposit() public payable {} - function withdraw(uint256 amount, uint256 coinid, uint256 amount2) public { - (bool success,) = MultiCoin.delegatecall( + (bool success,) = MultiCoin.call( abi.encodeWithSignature("transfer(address,uint256,uint256,uint256)", msg.sender, amount, coinid, amount2)); require(success); } + + receive() external payable {} } -- cgit v1.2.3