-
-
Save MicahZoltu/38e0a93f57737e8ec2f50781bf61414c to your computer and use it in GitHub Desktop.
Unexpected Parity Solidity Output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[{"constant":false,"inputs":[{"name":"recoveryDelayInDays","type":"uint8"}],"name":"createWallet","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"walletOwner","type":"address"}],"name":"getWalletFor","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"WalletCreated","type":"event"}] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0x6060604052341561000c57fe5b5b610e868061001c6000396000f300606060405263ffffffff60e060020a60003504166335f6c161811461002c5780638208921d1461006a575bfe5b341561003457fe5b61004260ff600435166100ae565b6040518082600160a060020a0316600160a060020a0316815260200191505060405180910390f35b341561007257fe5b610042600160a060020a0360043516610291565b6040518082600160a060020a0316600160a060020a0316815260200191505060405180910390f35b600060006000600160a060020a03166000600033600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a031614806101b0575033600160a060020a03166000600033600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a031663b2bdfa7b6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b151561018e57fe5b60325a03f1151561019b57fe5b50505060405180519050600160a060020a0316145b15156101bc5760006000fd5b82336101c66102bf565b808360ff1660ff16815260200182600160a060020a0316600160a060020a0316815260200192505050604051809103906000f080151561020257fe5b9050806000600033600160a060020a0316600160a060020a0316815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a0316021790555033600160a060020a03167f234cf33b32239d80b54161e2396c80cdeaf4d34161300e54d8bc01eb7c0ea55360405180905060405180910390a28091505b50919050565b600160a060020a03808216811660009081526020808201828152018120546101009190910a9004165b919050565b604051610b8b806102d08339019056006060604052341561000c57fe5b604051604080610b8b8339810160405280516020909101515b805b805b80600060006101000a815481600160a060020a030219169083600160a060020a031602179055505b505b506000600160a060020a031681600160a060020a0316141515156100775760006000fd5b81600560006101000a81548160ff021916908360ff1602179055505b50505b610ae6806100a56000396000f300606060405236156100ca5763ffffffff60e060020a6000350416630ba234d681146100d3578063103437b8146100e557806326532a22146101115780632fdcfbd2146101345780634e71e0c8146101625780636c81552d146101745780637e3bfa1d146101a7578063915a1909146101c5578063a6308909146101fd578063b2bdfa7b1461021b578063bd5021af14610253578063c1756a2c14610271578063c742380314610295578063d3b83758146102a7578063da3e3397146102df578063f2fde38b1461030d575b6100d15b5b565b005b34156100db57fe5b6100d161032b565b005b34156100ed57fe5b6100f56103b6565b604051808260ff1660ff16815260200191505060405180910390f35b341561011957fe5b6101216103c7565b6040805191825251602090910181900390f35b341561013c57fe5b6100d1600160a060020a0360048035821691602091820180359091169101356103cd565b005b341561016a57fe5b6100d1610499565b005b341561017c57fe5b610190600160a060020a0360043516610550565b604080519115151515825251602090910181900390f35b34156101af57fe5b6100d1600160a060020a0360043516610570565b005b34156101cd57fe5b6101d5610622565b6040518082600160a060020a0316600160a060020a0316815260200191505060405180910390f35b341561020557fe5b6100d1600160a060020a0360043516610639565b005b341561022357fe5b6101d56106eb565b6040518082600160a060020a0316600160a060020a0316815260200191505060405180910390f35b341561025b57fe5b6100d1600160a060020a0360043516610704565b005b341561027957fe5b6100d160048035600160a060020a031690602001356107ce565b005b341561029d57fe5b6100d1610839565b005b34156102af57fe5b6101d5610916565b6040518082600160a060020a0316600160a060020a0316815260200191505060405180910390f35b34156102e757fe5b6100d1600160a060020a03600480358216916020918201803590911691013561092d565b005b341561031557fe5b6100d1600160a060020a03600435166109f9565b005b600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161415156103615760006000fd5b60038054600160a060020a03600081811661010082900a908102920219909216179091556004556040517fedd770ee01b7c0ef4f503125eafdc2725536cbf32342dffcaa300d95a7cafce39080800390a15b5b565b60055460006101000a900460ff1681565b60045481565b6000600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161415156104055760006000fd5b83905080600160a060020a031663a9059cbb84846000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b151561047057fe5b60325a03f1151561047d57fe5b505060405151151590506104915760006000fd5b5b5b50505050565b6000600160009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161415156104d15760006000fd5b50600080546001805461010084900a90819004600160a060020a0390811681168202818302198086169190911786558354828716840291161790925592546040519284900482169390048116811691908316907fc2773729e033b030f1f595242c7740dc972227b5e11dfc64f0089481fe03b0379080800390a35b5b50565b60026020528060005260406000206000915054906101000a900460ff1681565b600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161415156105a65760006000fd5b60006002600083600160a060020a0316600160a060020a0316815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160a060020a03167f250546491931526473f4670f0964714a4f7272548fa2040f447d653f5cffbbb760405180905060405180910390a25b5b50565b60035460006101000a9004600160a060020a031681565b600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a031614151561066f5760006000fd5b60016002600083600160a060020a0316600160a060020a0316815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160a060020a03167fb5e3e4cd19e074ee95bbd1f4d13e94edb122e9abf12b57d96d2c4aea9b5dc5eb60405180905060405180910390a25b5b50565b600060009054906101000a9004600160a060020a031681565b6002600033600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff1615156107435760006000fd5b6000600160a060020a0316600360009054906101000a9004600160a060020a0316600160a060020a031614151561077a5760006000fd5b60038054600160a060020a0380841660006101000a81810292021990921617909155426004556040517fcd4e9df2b0a742bc5628c20baf55859f839c034aa76a32f600d6b085c4de48299080800390a25b50565b600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161415156108045760006000fd5b604051600160a060020a0383169082156108fc0290839060008180800381858888f19350505050151561083357fe5b5b5b5050565b6000600160a060020a0316600360009054906101000a9004600160a060020a0316600160a060020a0316141515156108715760006000fd5b600560009054906101000a900460ff1660ff16620151800262ffffff1660045401421115156108a05760006000fd5b6003805460018054600160a060020a03600061010081900a948590048216821685028286021993841617845585548282168602931692909217909455600455546040519190048216909116907f67e7e71677fff5d10e5f4c8855a7c978cafa5e152631ba1a283fe64a83030e589080800390a25b565b60015460006101000a9004600160a060020a031681565b6000600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161415156109655760006000fd5b83905080600160a060020a031663095ea7b384846000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b151561047057fe5b60325a03f1151561047d57fe5b505060405151151590506104915760006000fd5b5b5b50505050565b600060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a0316141515610a2f5760006000fd5b6000600160a060020a031681600160a060020a031614151515610a525760006000fd5b60018054600061010081900a600160a060020a03818102199093168584168202179384905590546040519382900483168316939190048216909116907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009080800390a35b5b505600a165627a7a723058203f144336b36b86a27c57452514756ef63f751b2d6346dbed9b6373d8fd4be8a90029a165627a7a72305820991d0b05c3c0032d751803fc294c904c85acc7b2c2aaaccabcff730f12afdb910029 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"compiler":{"version":"0.4.10+commit.f0d539ae"},"language":"Solidity","output":{"abi":[{"constant":false,"inputs":[{"name":"recoveryDelayInDays","type":"uint8"}],"name":"createWallet","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"walletOwner","type":"address"}],"name":"getWalletFor","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"WalletCreated","type":"event"}],"devdoc":{"methods":{}},"userdoc":{"methods":{}}},"settings":{"compilationTarget":{"":"RecoverableWalletFactory"},"libraries":{},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"sources":{"":{"keccak256":"0x7013ca6ae772378b445053f4a4a8b2d234d9be84be9ccf72cd072abd5fc64a7f","urls":["bzzr://970d4ecc4974ecf64ba3545339023f7ddb87e57310b3a300bcfc983eb43b5638"]}},"version":1} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity 0.4.10; | |
contract Token { | |
function transfer(address recipient, uint256 amount) external returns (bool success); | |
function approve(address spender, uint256 value) external returns (bool success); | |
} | |
contract RecoverableWalletFactory { | |
event WalletCreated(address indexed owner); | |
mapping(address => RecoverableWallet) private _wallets; | |
function createWallet(uint8 recoveryDelayInDays) external returns (RecoverableWallet) { | |
require(_wallets[msg.sender] == address(0) || _wallets[msg.sender]._owner() == msg.sender); | |
RecoverableWallet newWallet = new RecoverableWallet(recoveryDelayInDays, msg.sender); | |
_wallets[msg.sender] = newWallet; | |
WalletCreated(msg.sender); | |
return newWallet; | |
} | |
function getWalletFor(address walletOwner) external constant returns (RecoverableWallet) { | |
return _wallets[walletOwner]; | |
} | |
} | |
contract Ownable { | |
event OwnerChanged(address indexed oldOwner, address indexed newOwner); | |
address public _owner; | |
function Ownable(address owner) { | |
_owner = owner; | |
} | |
modifier onlyOwner() { | |
require(msg.sender == _owner); | |
_; | |
} | |
function transferOwnership(address newOwner) external onlyOwner { | |
require(newOwner != address(0)); | |
address oldOwner = _owner; | |
_owner = newOwner; | |
OwnerChanged(oldOwner, _owner); | |
} | |
} | |
contract Claimable is Ownable { | |
event OwnershipTransferStarted(address indexed oldOwner, address indexed newOwner); | |
event OwnershipTransferFinished(address indexed oldOwner, address indexed newOwner); | |
address public _pendingOwner; | |
modifier onlyPendingOwner() { | |
require(msg.sender == _pendingOwner); | |
_; | |
} | |
function Claimable(address owner) Ownable(owner) {} | |
function transferOwnership(address newOwner) external onlyOwner { | |
require(newOwner != address(0)); | |
_pendingOwner = newOwner; | |
OwnershipTransferStarted(_owner, _pendingOwner); | |
} | |
function claimOwnership() external onlyPendingOwner { | |
address oldOwner = _owner; | |
_owner = _pendingOwner; | |
_pendingOwner = address(0); | |
OwnershipTransferFinished(oldOwner, _owner); | |
} | |
} | |
contract RecoverableWallet is Claimable { | |
event RecoveryAddressAdded(address indexed newRecoverer); | |
event RecoveryAddressRemoved(address indexed oldRecoverer); | |
event RecoveryStarted(address indexed newOwner); | |
event RecoveryCancelled(); | |
event RecoveryFinished(address indexed newOwner); | |
mapping(address => bool) public _recoveryAddresses; | |
address public _activeRecoveryAddress; | |
uint256 public _activeRecoveryStartTime; | |
uint8 public _recoveryDelayDays; | |
function RecoverableWallet(uint8 recoveryDelayInDays, address owner) Claimable(owner) { | |
require(owner != address(0)); | |
_recoveryDelayDays = recoveryDelayInDays; | |
} | |
function () external payable { } | |
function addRecoveryAddress(address newRecoveryAddress) external onlyOwner { | |
_recoveryAddresses[newRecoveryAddress] = true; | |
RecoveryAddressAdded(newRecoveryAddress); | |
} | |
function removeRecoveryAddress(address oldRecoveryAddress) external onlyOwner { | |
_recoveryAddresses[oldRecoveryAddress] = false; | |
RecoveryAddressRemoved(oldRecoveryAddress); | |
} | |
function startRecovery(address newOwnerAddress) external { | |
require(_recoveryAddresses[msg.sender]); | |
require(_activeRecoveryAddress == address(0)); | |
_activeRecoveryAddress = newOwnerAddress; | |
_activeRecoveryStartTime = block.timestamp; | |
RecoveryStarted(newOwnerAddress); | |
} | |
function cancelRecovery() external onlyOwner { | |
_activeRecoveryAddress = address(0); | |
_activeRecoveryStartTime = 0; | |
RecoveryCancelled(); | |
} | |
function finishRecovery() external { | |
require(_activeRecoveryAddress != address(0)); | |
require(block.timestamp > _activeRecoveryStartTime + _recoveryDelayDays * 1 days); | |
_pendingOwner = _activeRecoveryAddress; | |
_activeRecoveryAddress = address(0); | |
_activeRecoveryStartTime = 0; | |
RecoveryFinished(_pendingOwner); | |
} | |
function sendEther(address destination, uint256 amount) external onlyOwner { | |
destination.transfer(amount); | |
} | |
function sendToken(address tokenAddress, address destination, uint256 amount) external onlyOwner { | |
Token token = Token(tokenAddress); | |
require(token.transfer(destination, amount)); | |
} | |
function approveToken(address tokenAddress, address spender, uint256 amount) external onlyOwner { | |
Token token = Token(tokenAddress); | |
require(token.approve(spender, amount)); | |
} | |
// TODO: allow calling arbitrary contracts by owner | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
991d0b05c3c0032d751803fc294c904c85acc7b2c2aaaccabcff730f12afdb91 |
All of the above (except source) is for the RecoverableWalletFactory
contract.
Has been uploaded to mainnet at 0x1B69BCd7A17ec0C3b6a66212306C903A53533613
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Parity Version:
Parity//v1.6.6-beta-8c6e3f3-20170411/x86_64-windows-msvc/rustc1.16.0