From 6441b6f9d4ad495ab68b4521c91cbbbb9db62cde Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Tue, 5 Mar 2019 22:56:14 +0100 Subject: [PATCH] Add reverse proxy call to owner owner might be a multisig, this allows read from/management of any eventual owning contract directly from the proxy. Usefull if the owning contract implements interfaces like ERC1271. That way dapps can call them without having to resolve the proxy ownership, thus making the proxy transparent --- contracts/contracts/Identity.sol | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/contracts/contracts/Identity.sol b/contracts/contracts/Identity.sol index 12f5d959..c8c42b6a 100644 --- a/contracts/contracts/Identity.sol +++ b/contracts/contracts/Identity.sol @@ -40,7 +40,21 @@ contract ProxyAccount is ERC725 { // ---------------- // Public functions - function () external payable {} + function () external payable { + if (msg.sig != bytes4(0)) { + address root = toAddress(store[KEY_OWNER]); + assembly { + let ptr := mload(0x40) + calldatacopy(ptr, 0, calldatasize) + let result := call(gas, root, 0, ptr, calldatasize, 0, 0) // do we want to forward value ? my guess is no. + let size := returndatasize + returndatacopy(ptr, 0, size) + switch result + case 0 { revert (ptr, size) } + default { return (ptr, size) } + } + } + } function getData(bytes32 _key) external view returns (bytes32 _value) { return store[_key];