commit 139eb13f719b93e547884d9361f1de6dbb40a320
parent f26abe04ab360f38a52e63ca21610a963eecd6a9
Author: nolash <dev@holbrook.no>
Date: Fri, 30 Apr 2021 08:37:21 +0200
Add EIP173, custom 'Owned' support
Diffstat:
3 files changed, 93 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
@@ -5,3 +5,5 @@
* Add eth subscribe monitor
* Add eth erc20 transfer script
* Add eth gas send script
+ * Add eth eip165 support
+ * Add eth eip173, custom "owned" support
diff --git a/chainlib/eth/owned.py b/chainlib/eth/owned.py
@@ -4,16 +4,22 @@ from hexathon import (
)
# local imports
-from .contract import (
+from chainlib.eth.contract import (
ABIContractEncoder,
ABIContractDecoder,
ABIContractType,
+ abi_decode_single,
)
from chainlib.jsonrpc import jsonrpc_template
+from chainlib.eth.tx import (
+ TxFactory,
+ TxFormat,
+ )
+from chainlib.eth.constant import ZERO_ADDRESS
class EIP173(TxFactory):
- def transfer_ownership(self, contract_address, sender_address, new_owner_address):
+ def transfer_ownership(self, contract_address, sender_address, new_owner_address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method('transferOwnership')
enc.typ(ABIContractType.ADDRESS)
@@ -45,7 +51,7 @@ class EIP173(TxFactory):
class Owned(EIP173):
- def accept_ownership(self, contract_address, sender_address):
+ def accept_ownership(self, contract_address, sender_address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method('acceptOwnership')
data = add_0x(enc.get())
@@ -55,7 +61,7 @@ class Owned(EIP173):
return tx
- def take_ownership(self, contract_address, sender_address, resource_address):
+ def take_ownership(self, contract_address, sender_address, resource_address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method('takeOwnership')
enc.typ(ABIContractType.ADDRESS)
diff --git a/tests/test_owned.py b/tests/test_owned.py
@@ -12,7 +12,10 @@ from chainlib.eth.tx import (
TxFactory,
receipt,
)
-from chainlib.eth.eip165 import EIP165
+from chainlib.eth.owned import (
+ EIP173,
+ Owned,
+ )
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()
@@ -45,7 +48,83 @@ class TestOwned(EthTesterCase):
def test_owned(self):
- pass
+ c = EIP173(self.chain_spec)
+ o = c.owner(self.address, sender_address=self.accounts[0])
+ r = self.conn.do(o)
+ owner = c.parse_owner(r)
+ self.assertEqual(owner, self.accounts[0])
+
+
+ def test_transfer_ownership(self):
+ nonce_oracle = RPCNonceOracle(self.accounts[2], self.conn)
+ gas_oracle = OverrideGasOracle(limit=8000000, conn=self.conn)
+ c = EIP173(self.chain_spec, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, signer=self.signer)
+ (tx_hash_hex, o) = c.transfer_ownership(self.address, self.accounts[2], self.accounts[1])
+ r = self.conn.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 0)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
+ c = EIP173(self.chain_spec, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, signer=self.signer)
+ (tx_hash_hex, o) = c.transfer_ownership(self.address, self.accounts[0], self.accounts[1])
+ r = self.conn.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+
+ def test_accept_ownership(self):
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
+ gas_oracle = OverrideGasOracle(limit=8000000, conn=self.conn)
+ c = Owned(self.chain_spec, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, signer=self.signer)
+ (tx_hash_hex, o) = c.transfer_ownership(self.address, self.accounts[0], self.accounts[1])
+ r = self.conn.do(o)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[2], self.conn)
+ c = Owned(self.chain_spec, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, signer=self.signer)
+ (tx_hash_hex, o) = c.accept_ownership(self.address, self.accounts[2])
+ r = self.conn.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 0)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[1], self.conn)
+ c = Owned(self.chain_spec, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, signer=self.signer)
+ (tx_hash_hex, o) = c.accept_ownership(self.address, self.accounts[1])
+ r = self.conn.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.owner(self.address, sender_address=self.accounts[0])
+ r = self.conn.do(o)
+ owner = c.parse_owner(r)
+ self.assertEqual(owner, self.accounts[1])
+
+
+ def test_take_ownership(self):
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
+ gas_oracle = OverrideGasOracle(limit=8000000, conn=self.conn)
+ c = Owned(self.chain_spec, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, signer=self.signer)
+ (tx_hash_hex, o) = c.transfer_ownership(self.address, self.accounts[0], self.address)
+ r = self.conn.do(o)
+
+ (tx_hash_hex, o) = c.take_ownership(self.address, self.accounts[0], self.address)
+ r = self.conn.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.owner(self.address, sender_address=self.accounts[0])
+ r = self.conn.do(o)
+ owner = c.parse_owner(r)
+ self.assertEqual(owner, self.address)
if __name__ == '__main__':