From 3165e7fa698092d4b62a8dec61237b7330ce5fac Mon Sep 17 00:00:00 2001 From: Gulshan Vasnani Date: Mon, 18 Feb 2019 10:36:38 +0530 Subject: [PATCH 1/4] Added logout executable data with test-case --- contracts/abi/TokenHolder.abi | 2 +- contracts/bin/TokenHolder.bin | 2 +- lib/helper/TokenHolder.js | 15 +++++++++ test/integration/WalletOperations.js | 49 ++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/contracts/abi/TokenHolder.abi b/contracts/abi/TokenHolder.abi index 27137c3..7229dcc 100644 --- a/contracts/abi/TokenHolder.abi +++ b/contracts/abi/TokenHolder.abi @@ -1 +1 @@ -[{"constant":true,"inputs":[],"name":"EXECUTE_RULE_CALLPREFIX","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenRules","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXECUTE_REDEMPTION_CALLPREFIX","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"sessionKeys","outputs":[{"name":"spendingLimit","type":"uint256"},{"name":"expirationHeight","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sessionKey","type":"address"}],"name":"SessionAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sessionKey","type":"address"}],"name":"SessionRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_messageHash","type":"bytes32"},{"indexed":false,"name":"_status","type":"bool"}],"name":"RuleExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_messageHash","type":"bytes32"},{"indexed":false,"name":"_status","type":"bool"}],"name":"RedemptionExecuted","type":"event"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_tokenRules","type":"address"},{"name":"_owner","type":"address"},{"name":"_sessionKeys","type":"address[]"},{"name":"_sessionKeysSpendingLimits","type":"uint256[]"},{"name":"_sessionKeysExpirationHeights","type":"uint256[]"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sessionKey","type":"address"},{"name":"_spendingLimit","type":"uint256"},{"name":"_expirationHeight","type":"uint256"}],"name":"authorizeSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sessionKey","type":"address"}],"name":"revokeSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"logout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_data","type":"bytes"},{"name":"_nonce","type":"uint256"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"executeRule","outputs":[{"name":"executionStatus_","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_data","type":"bytes"},{"name":"_nonce","type":"uint256"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"executeRedemption","outputs":[{"name":"executionStatus_","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] \ No newline at end of file +[{"constant":true,"inputs":[],"name":"EXECUTE_RULE_CALLPREFIX","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sessionWindow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenRules","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXECUTE_REDEMPTION_CALLPREFIX","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"sessionKeys","outputs":[{"name":"spendingLimit","type":"uint256"},{"name":"expirationHeight","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"session","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sessionKey","type":"address"}],"name":"SessionAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sessionKey","type":"address"}],"name":"SessionRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sessionWindow","type":"uint256"}],"name":"SessionsLoggedOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_messageHash","type":"bytes32"},{"indexed":false,"name":"_status","type":"bool"}],"name":"RuleExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_messageHash","type":"bytes32"},{"indexed":false,"name":"_status","type":"bool"}],"name":"RedemptionExecuted","type":"event"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_tokenRules","type":"address"},{"name":"_owner","type":"address"},{"name":"_sessionKeys","type":"address[]"},{"name":"_sessionKeysSpendingLimits","type":"uint256[]"},{"name":"_sessionKeysExpirationHeights","type":"uint256[]"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sessionKey","type":"address"},{"name":"_spendingLimit","type":"uint256"},{"name":"_expirationHeight","type":"uint256"}],"name":"authorizeSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sessionKey","type":"address"}],"name":"revokeSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"logout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_data","type":"bytes"},{"name":"_nonce","type":"uint256"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"executeRule","outputs":[{"name":"executionStatus_","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_data","type":"bytes"},{"name":"_nonce","type":"uint256"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"executeRedemption","outputs":[{"name":"executionStatus_","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] \ No newline at end of file diff --git a/contracts/bin/TokenHolder.bin b/contracts/bin/TokenHolder.bin index 1eea702..ac410e7 100644 --- a/contracts/bin/TokenHolder.bin +++ b/contracts/bin/TokenHolder.bin @@ -1 +1 @@ -0x608060405234801561001057600080fd5b5061195e806100206000396000f3fe6080604052600436106100a05763ffffffff60e060020a600035041663028c979d81146100a55780631f3c99c3146100e65780631fa5d6a4146100fb57806351491e0c1461012e5780635c0a60f91461017557806360c30e8f146102b75780638da5cb5b1461036057806397ebe030146103915780639c144d5e14610426578063a2d2ff681461043b578063b7b8d60414610450578063fc0c546a146104bc575b600080fd5b3480156100b157600080fd5b506100e4600480360360608110156100c857600080fd5b50600160a060020a0381351690602081013590604001356104d1565b005b3480156100f257600080fd5b506100e4610543565b34801561010757600080fd5b506100e46004803603602081101561011e57600080fd5b5035600160a060020a0316610620565b34801561013a57600080fd5b50610143610766565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b34801561018157600080fd5b506100e4600480360360c081101561019857600080fd5b600160a060020a03823581169260208101358216926040820135909216918101906080810160608201356401000000008111156101d457600080fd5b8201836020820111156101e657600080fd5b8035906020019184602083028401116401000000008311171561020857600080fd5b91939092909160208101903564010000000081111561022657600080fd5b82018360208201111561023857600080fd5b8035906020019184602083028401116401000000008311171561025a57600080fd5b91939092909160208101903564010000000081111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460208302840111640100000000831117156102ac57600080fd5b5090925090506107c1565b61034c600480360360c08110156102cd57600080fd5b600160a060020a0382351691908101906040810160208201356401000000008111156102f857600080fd5b82018360208201111561030a57600080fd5b8035906020019184600183028401116401000000008311171561032c57600080fd5b91935091508035906020810135906040810135906060013560ff16610b6a565b604080519115158252519081900360200190f35b34801561036c57600080fd5b50610375610f53565b60408051600160a060020a039092168252519081900360200190f35b61034c600480360360c08110156103a757600080fd5b600160a060020a0382351691908101906040810160208201356401000000008111156103d257600080fd5b8201836020820111156103e457600080fd5b8035906020019184600183028401116401000000008311171561040657600080fd5b91935091508035906020810135906040810135906060013560ff16610f62565b34801561043257600080fd5b5061037561141a565b34801561044757600080fd5b50610143611429565b34801561045c57600080fd5b506104836004803603602081101561047357600080fd5b5035600160a060020a0316611484565b604051808581526020018481526020018381526020018260028111156104a557fe5b60ff16815260200194505050505060405180910390f35b3480156104c857600080fd5b506103756114b0565b600454600160a060020a03163314610533576040805160e560020a62461bcd02815260206004820152601e60248201527f4f6e6c79206f776e657220697320616c6c6f77656420746f2063616c6c2e0000604482015290519081900360640190fd5b61053e8383836114bf565b505050565b336001600160a060020a03821660009081526002602081905260409091206003015460ff169081111561057257fe5b146105c7576040805160e560020a62461bcd02815260206004820152601660248201527f4b6579206973206e6f7420617574686f72697a65642e00000000000000000000604482015290519081900360640190fd5b336000908152600260208190526040909120600301805460ff191660018302179055506040805133815290517f2991ab7bfda4556c9e662762b3dfa89a1df391084c4278286d466c1c187e55239181900360200190a150565b600454600160a060020a03163314610682576040805160e560020a62461bcd02815260206004820152601e60248201527f4f6e6c79206f776e657220697320616c6c6f77656420746f2063616c6c2e0000604482015290519081900360640190fd5b806001600160a060020a03821660009081526002602081905260409091206003015460ff16908111156106b157fe5b14610706576040805160e560020a62461bcd02815260206004820152601660248201527f4b6579206973206e6f7420617574686f72697a65642e00000000000000000000604482015290519081900360640190fd5b600160a060020a038216600081815260026020818152604092839020600301805460ff1916909217909155815192835290517f2991ab7bfda4556c9e662762b3dfa89a1df391084c4278286d466c1c187e55239281900390910190a15050565b604080517f6578656375746552756c6528616464726573732c62797465732c75696e74323581527f362c75696e74382c627974657333322c627974657333322900000000000000006020820152905190819003603801902081565b600154600160a060020a03161580156107e35750600454600160a060020a0316155b80156107f85750600354600160a060020a0316155b151561084e576040805160e560020a62461bcd02815260206004820181905260248201527f436f6e747261637420686173206265656e20616c72656164792073657475702e604482015290519081900360640190fd5b600160a060020a03891615156108ae576040805160e560020a62461bcd02815260206004820152601f60248201527f546f6b656e20636f6e74726163742061646472657373206973206e756c6c2e00604482015290519081900360640190fd5b600160a060020a0388161515610933576040805160e560020a62461bcd028152602060048201526024808201527f546f6b656e52756c657320636f6e74726163742061646472657373206973206e60448201527f756c6c2e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0387161515610993576040805160e560020a62461bcd02815260206004820152601660248201527f4f776e65722061646472657373206973206e756c6c2e00000000000000000000604482015290519081900360640190fd5b848314610a10576040805160e560020a62461bcd02815260206004820152603e60248201527f53657373696f6e206b65797320616e64207370656e64696e67206c696d69747360448201527f20617272617973206c656e677468732061726520646966666572656e742e0000606482015290519081900360840190fd5b848114610ab3576040805160e560020a62461bcd02815260206004820152604160248201527f53657373696f6e206b65797320616e642065787069726174696f6e206865696760448201527f68747320617272617973206c656e677468732061726520646966666572656e7460648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b60018054600160a060020a03808c1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600380548b841690831617905560048054928a169290911691909117905560005b85811015610b5e57610b56878783818110610b1757fe5b90506020020135600160a060020a03168686848181101515610b3557fe5b905060200201358585858181101515610b4a57fe5b905060200201356114bf565b600101610b00565b50505050505050505050565b600080600160009054906101000a9004600160a060020a0316600160a060020a03166384f48d6a6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610bbe57600080fd5b505afa158015610bd2573d6000803e3d6000fd5b505050506040513d6020811015610be857600080fd5b50519050600160a060020a0389811690821614610c75576040805160e560020a62461bcd02815260206004820152602660248201527f27746f272061646472657373206973206e6f7420636f4761746577617920616460448201527f64726573732e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600080610d1a60405180807f65786563757465526564656d7074696f6e28616464726573732c62797465732c81526020017f75696e743235362c75696e74382c627974657333322c62797465733332290000815250603e01905060405180910390208c8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508d91508c90508b6116a2565b9150915060006002600083600160a060020a0316600160a060020a031681526020019081526020016000209050600160009054906101000a9004600160a060020a0316600160a060020a031663095ea7b38d83600001546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050506040513d6020811015610ded57600080fd5b5050604051606090600160a060020a038e169034908e908e90808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610e54576040519150601f19603f3d011682016040523d82523d6000602084013e610e59565b606091505b508092508197505050600160009054906101000a9004600160a060020a0316600160a060020a031663095ea7b38e60006040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050506040513d6020811015610f0557600080fd5b505060408051858152871515602082015281517f23a87d3083eafe50e6f601373e38cd7afe8a0725d15d3f8b097a83f03acdb064929181900390910190a15050505050979650505050505050565b600454600160a060020a031681565b600154600090600160a060020a0389811691161415610ff1576040805160e560020a62461bcd02815260206004820152602660248201527f27746f272061646472657373206973207574696c69747920746f6b656e20616460448201527f64726573732e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038816301415611078576040805160e560020a62461bcd02815260206004820152602b60248201527f27746f27206164647265737320697320546f6b656e486f6c646572206164647260448201527f65737320697473656c662e000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008061111d60405180807f6578656375746552756c6528616464726573732c62797465732c75696e74323581526020017f362c75696e74382c627974657333322c62797465733332290000000000000000815250603801905060405180910390208b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c91508b90508a6116a2565b600160a060020a0380821660009081526002602052604080822060035482517f2185810b0000000000000000000000000000000000000000000000000000000081529251969850949650949390921692632185810b92600480820193929182900301818387803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b50506001546003548454604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a03938416600482015260248101929092525191909216935063095ea7b3925060448083019260209291908290030181600087803b15801561121c57600080fd5b505af1158015611230573d6000803e3d6000fd5b505050506040513d602081101561124657600080fd5b5050604051606090600160a060020a038d169034908d908d90808383808284376040519201945060009350909150508083038185875af1925050503d80600081146112ad576040519150601f19603f3d011682016040523d82523d6000602084013e6112b2565b606091505b50600154600354604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526000602482018190529151959a5093955091169263095ea7b3926044808201936020939283900390910190829087803b15801561132c57600080fd5b505af1158015611340573d6000803e3d6000fd5b505050506040513d602081101561135657600080fd5b5050600354604080517f212c81570000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163212c81579160048082019260009290919082900301818387803b1580156113b757600080fd5b505af11580156113cb573d6000803e3d6000fd5b505060408051878152881515602082015281517f36cd2662860eb4ad66890c2d0ac0af9dde2f8927a7190e1eaed43ce9d43682b19450908190039091019150a150505050979650505050505050565b600354600160a060020a031681565b604080517f65786563757465526564656d7074696f6e28616464726573732c62797465732c81527f75696e743235362c75696e74382c627974657333322c627974657333322900006020820152905190819003603e01902081565b600260208190526000918252604090912080546001820154928201546003909201549092919060ff1684565b600154600160a060020a031681565b82600160a060020a0381161515611520576040805160e560020a62461bcd02815260206004820152601460248201527f4b65792061646472657373206973206e756c6c2e000000000000000000000000604482015290519081900360640190fd5b836000600160a060020a03821660009081526002602081905260409091206003015460ff169081111561154f57fe5b146115a4576040805160e560020a62461bcd02815260206004820152600b60248201527f4b6579206578697374732e000000000000000000000000000000000000000000604482015290519081900360640190fd5b438311611621576040805160e560020a62461bcd02815260206004820152603560248201527f45787069726174696f6e20686569676874206973206c746520746f207468652060448201527f63757272656e7420626c6f636b206865696768742e0000000000000000000000606482015290519081900360840190fd5b600160a060020a0385166000908152600260208190526040822086815560018082018790559181019290925560038201805460ff19168280021790555060408051600160a060020a038816815290517faaf20b4ab9461ac8240a308f4bae35956040be348d648df2aa881374181898879181900360200190a1505050505050565b6000806116b8898989805190602001208961183f565b915060018284878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611717573d6000803e3d6000fd5b505060408051601f190151600160a060020a038116600090815260026020529190912090925090506001600382015460ff16600281111561175457fe5b1480156117645750438160010154115b15156117ba576040805160e560020a62461bcd02815260206004820152601a60248201527f53657373696f6e206b6579206973206e6f74206163746976652e000000000000604482015290519081900360640190fd5b60028101548714611815576040805160e560020a62461bcd02815260206004820152601d60248201527f496e636f7272656374206e6f6e6365206973207370656369666965642e000000604482015290519081900360640190fd5b600281015461182b90600163ffffffff61191916565b600290910155909890975095505050505050565b604080517f19000000000000000000000000000000000000000000000000000000000000006020808301919091526000602183018190526c010000000000000000000000003081026022850152600160a060020a039097169096026036830152604a8201869052604b820194909452606b810192909252608b8201849052608c8201849052608d82018490527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909416608e820152609281018390526093808201939093528351808203909301835260b301909252805191012090565b60008282018381101561192b57600080fd5b939250505056fea165627a7a723058200a99ce15f8b69ac8ee36e574ca284cef3cda29e4fbde2f0c231e4c113ed9b0e90029 \ No newline at end of file +0x608060405234801561001057600080fd5b5061198a806100206000396000f3fe6080604052600436106100ab5763ffffffff60e060020a600035041663028c979d81146100b05780631f3c99c3146100f15780631fa5d6a41461010657806351491e0c146101395780635c0a60f91461018057806360c30e8f146102c257806389aa2af01461036b5780638da5cb5b1461039257806397ebe030146103c35780639c144d5e14610458578063a2d2ff681461046d578063b7b8d60414610482578063fc0c546a146104db575b600080fd5b3480156100bc57600080fd5b506100ef600480360360608110156100d357600080fd5b50600160a060020a0381351690602081013590604001356104f0565b005b3480156100fd57600080fd5b506100ef610562565b34801561011257600080fd5b506100ef6004803603602081101561012957600080fd5b5035600160a060020a0316610612565b34801561014557600080fd5b5061014e610742565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b34801561018c57600080fd5b506100ef600480360360c08110156101a357600080fd5b600160a060020a03823581169260208101358216926040820135909216918101906080810160608201356401000000008111156101df57600080fd5b8201836020820111156101f157600080fd5b8035906020019184602083028401116401000000008311171561021357600080fd5b91939092909160208101903564010000000081111561023157600080fd5b82018360208201111561024357600080fd5b8035906020019184602083028401116401000000008311171561026557600080fd5b91939092909160208101903564010000000081111561028357600080fd5b82018360208201111561029557600080fd5b803590602001918460208302840111640100000000831117156102b757600080fd5b50909250905061079d565b610357600480360360c08110156102d857600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561030357600080fd5b82018360208201111561031557600080fd5b8035906020019184600183028401116401000000008311171561033757600080fd5b91935091508035906020810135906040810135906060013560ff16610b4a565b604080519115158252519081900360200190f35b34801561037757600080fd5b50610380610f33565b60408051918252519081900360200190f35b34801561039e57600080fd5b506103a7610f39565b60408051600160a060020a039092168252519081900360200190f35b610357600480360360c08110156103d957600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561040457600080fd5b82018360208201111561041657600080fd5b8035906020019184600183028401116401000000008311171561043857600080fd5b91935091508035906020810135906040810135906060013560ff16610f48565b34801561046457600080fd5b506103a7611403565b34801561047957600080fd5b5061014e611412565b34801561048e57600080fd5b506104b5600480360360208110156104a557600080fd5b5035600160a060020a031661146d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156104e757600080fd5b506103a7611496565b600554600160a060020a03163314610552576040805160e560020a62461bcd02815260206004820152601e60248201527f4f6e6c79206f776e657220697320616c6c6f77656420746f2063616c6c2e0000604482015290519081900360640190fd5b61055d8383836114a5565b505050565b600554600160a060020a031633146105c4576040805160e560020a62461bcd02815260206004820152601e60248201527f4f6e6c79206f776e657220697320616c6c6f77656420746f2063616c6c2e0000604482015290519081900360640190fd5b60025460408051918252517f4fdc3ae5b88cfb88e6fd0018782bd67575d1f425d78385735194b2607f7eda739181900360200190a160025461060d90600163ffffffff61166b16565b600255565b600554600160a060020a03163314610674576040805160e560020a62461bcd02815260206004820152601e60248201527f4f6e6c79206f776e657220697320616c6c6f77656420746f2063616c6c2e0000604482015290519081900360640190fd5b806001600160a060020a03821660009081526003602081905260409091200154116106e9576040805160e560020a62461bcd02815260206004820152601660248201527f4b6579206973206e6f7420617574686f72697a65642e00000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000818152600360208181526040928390206001920191909155815192835290517f2991ab7bfda4556c9e662762b3dfa89a1df391084c4278286d466c1c187e55239281900390910190a15050565b604080517f6578656375746552756c6528616464726573732c62797465732c75696e74323581527f362c75696e74382c627974657333322c627974657333322900000000000000006020820152905190819003603801902081565b600154600160a060020a03161580156107bf5750600554600160a060020a0316155b80156107d45750600454600160a060020a0316155b151561082a576040805160e560020a62461bcd02815260206004820181905260248201527f436f6e747261637420686173206265656e20616c72656164792073657475702e604482015290519081900360640190fd5b600160a060020a038916151561088a576040805160e560020a62461bcd02815260206004820152601f60248201527f546f6b656e20636f6e74726163742061646472657373206973206e756c6c2e00604482015290519081900360640190fd5b600160a060020a038816151561090f576040805160e560020a62461bcd028152602060048201526024808201527f546f6b656e52756c657320636f6e74726163742061646472657373206973206e60448201527f756c6c2e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716151561096f576040805160e560020a62461bcd02815260206004820152601660248201527f4f776e65722061646472657373206973206e756c6c2e00000000000000000000604482015290519081900360640190fd5b8483146109ec576040805160e560020a62461bcd02815260206004820152603e60248201527f53657373696f6e206b65797320616e64207370656e64696e67206c696d69747360448201527f20617272617973206c656e677468732061726520646966666572656e742e0000606482015290519081900360840190fd5b848114610a8f576040805160e560020a62461bcd02815260206004820152604160248201527f53657373696f6e206b65797320616e642065787069726174696f6e206865696760448201527f68747320617272617973206c656e677468732061726520646966666572656e7460648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b60018054600160a060020a03808c1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600480548b841690831617905560058054928a16929091169190911790556002805560005b85811015610b3e57610b36878783818110610af757fe5b90506020020135600160a060020a03168686848181101515610b1557fe5b905060200201358585858181101515610b2a57fe5b905060200201356114a5565b600101610ae0565b50505050505050505050565b600080600160009054906101000a9004600160a060020a0316600160a060020a03166384f48d6a6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610b9e57600080fd5b505afa158015610bb2573d6000803e3d6000fd5b505050506040513d6020811015610bc857600080fd5b50519050600160a060020a0389811690821614610c55576040805160e560020a62461bcd02815260206004820152602660248201527f27746f272061646472657373206973206e6f7420636f4761746577617920616460448201527f64726573732e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600080610cfa60405180807f65786563757465526564656d7074696f6e28616464726573732c62797465732c81526020017f75696e743235362c75696e74382c627974657333322c62797465733332290000815250603e01905060405180910390208c8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508d91508c90508b611684565b9150915060006003600083600160a060020a0316600160a060020a031681526020019081526020016000209050600160009054906101000a9004600160a060020a0316600160a060020a031663095ea7b38d83600001546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b505050506040513d6020811015610dcd57600080fd5b5050604051606090600160a060020a038e169034908e908e90808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e39565b606091505b508092508197505050600160009054906101000a9004600160a060020a0316600160a060020a031663095ea7b38e60006040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610ebb57600080fd5b505af1158015610ecf573d6000803e3d6000fd5b505050506040513d6020811015610ee557600080fd5b505060408051858152871515602082015281517f23a87d3083eafe50e6f601373e38cd7afe8a0725d15d3f8b097a83f03acdb064929181900390910190a15050505050979650505050505050565b60025481565b600554600160a060020a031681565b600154600090600160a060020a0389811691161415610fd7576040805160e560020a62461bcd02815260206004820152602660248201527f27746f272061646472657373206973207574696c69747920746f6b656e20616460448201527f64726573732e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03881630141561105e576040805160e560020a62461bcd02815260206004820152602b60248201527f27746f27206164647265737320697320546f6b656e486f6c646572206164647260448201527f65737320697473656c662e000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008061110360405180807f6578656375746552756c6528616464726573732c62797465732c75696e74323581526020017f362c75696e74382c627974657333322c62797465733332290000000000000000815250603801905060405180910390208b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c91508b90508a611684565b600160a060020a038082166000908152600360205260408082206004805483517f2185810b000000000000000000000000000000000000000000000000000000008152935197995095975090959490931693632185810b93828101939282900301818387803b15801561117557600080fd5b505af1158015611189573d6000803e3d6000fd5b5050600154600480548554604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a03938416948101949094526024840191909152519216935063095ea7b392506044808201926020929091908290030181600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b505050506040513d602081101561122d57600080fd5b5050604051606090600160a060020a038d169034908d908d90808383808284376040519201945060009350909150508083038185875af1925050503d8060008114611294576040519150601f19603f3d011682016040523d82523d6000602084013e611299565b606091505b5060015460048054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a03928316938101939093526000602484018190529051959a509395509091169263095ea7b392604480840193602093929083900390910190829087803b15801561131857600080fd5b505af115801561132c573d6000803e3d6000fd5b505050506040513d602081101561134257600080fd5b505060048054604080517f212c81570000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169263212c815792828201926000929082900301818387803b1580156113a057600080fd5b505af11580156113b4573d6000803e3d6000fd5b505060408051878152881515602082015281517f36cd2662860eb4ad66890c2d0ac0af9dde2f8927a7190e1eaed43ce9d43682b19450908190039091019150a150505050979650505050505050565b600454600160a060020a031681565b604080517f65786563757465526564656d7074696f6e28616464726573732c62797465732c81527f75696e743235362c75696e74382c627974657333322c627974657333322900006020820152905190819003603e01902081565b600360208190526000918252604090912080546001820154600283015492909301549092919084565b600154600160a060020a031681565b82600160a060020a0381161515611506576040805160e560020a62461bcd02815260206004820152601460248201527f4b65792061646472657373206973206e756c6c2e000000000000000000000000604482015290519081900360640190fd5b836000600160a060020a038216600090815260036020819052604090912001541461157b576040805160e560020a62461bcd02815260206004820152600b60248201527f4b6579206578697374732e000000000000000000000000000000000000000000604482015290519081900360640190fd5b4383116115f8576040805160e560020a62461bcd02815260206004820152603560248201527f45787069726174696f6e20686569676874206973206c746520746f207468652060448201527f63757272656e7420626c6f636b206865696768742e0000000000000000000000606482015290519081900360840190fd5b600160a060020a0385166000818152600360208181526040808420898155600181018990556002808201959095559354928401929092558151938452905191927faaf20b4ab9461ac8240a308f4bae35956040be348d648df2aa88137418189887929081900390910190a1505050505050565b60008282018381101561167d57600080fd5b9392505050565b60008061169a8989898051906020012089611884565b915060018284878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116f9573d6000803e3d6000fd5b505060408051601f190151600160a060020a038116600090815260036020819052929020600254928101549194509250146117a4576040805160e560020a62461bcd02815260206004820152603860248201527f4b657927732073657373696f6e206973206e6f7420657175616c20746f20636f60448201527f6e747261637427732073657373696f6e2077696e646f772e0000000000000000606482015290519081900360840190fd5b600181015443106117ff576040805160e560020a62461bcd02815260206004820152601860248201527f53657373696f6e206b65792077617320657870697265642e0000000000000000604482015290519081900360640190fd5b6002810154871461185a576040805160e560020a62461bcd02815260206004820152601d60248201527f496e636f7272656374206e6f6e6365206973207370656369666965642e000000604482015290519081900360640190fd5b600281015461187090600163ffffffff61166b16565b600290910155909890975095505050505050565b604080517f19000000000000000000000000000000000000000000000000000000000000006020808301919091526000602183018190526c010000000000000000000000003081026022850152600160a060020a039097169096026036830152604a8201869052604b820194909452606b810192909252608b8201849052608c8201849052608d82018490527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909416608e820152609281018390526093808201939093528351808203909301835260b30190925280519101209056fea165627a7a723058204f6a55fb77b6160849cea39cf95d729484634c77487355b7d41814e19a18b9200029 \ No newline at end of file diff --git a/lib/helper/TokenHolder.js b/lib/helper/TokenHolder.js index 0eafe7c..0108f1a 100644 --- a/lib/helper/TokenHolder.js +++ b/lib/helper/TokenHolder.js @@ -79,6 +79,21 @@ class TokenHolder { return executableData; } + /** + * Logout all authorized sessions. + * + * @returns {*} Executable data to logout sessions. + */ + getLogoutExecutableData() { + const oThis = this; + + const jsonInterface = oThis.abiBinProvider.getABI(tokenHolderContractName), + contract = new oThis.auxiliaryWeb3.eth.Contract(jsonInterface, oThis.tokenHolderProxy), + executableData = contract.methods.logout().encodeABI(); + + return executableData; + } + /** * It is used to get call prefix of executeRule method in TokenHolder contract. * diff --git a/test/integration/WalletOperations.js b/test/integration/WalletOperations.js index 3c073b8..bd56e92 100644 --- a/test/integration/WalletOperations.js +++ b/test/integration/WalletOperations.js @@ -444,6 +444,55 @@ describe('Wallet operations', async function() { ); }); + // wallet9, wallet8 are the owners. + it('Should logout all authorized sessions', async function() { + const tokenHolderInstance = new TokenHolder(auxiliaryWeb3, tokenHolderProxy); + const currentOwner = wallets[9]; + const logoutExData = tokenHolderInstance.getLogoutExecutableData(); + + const nonce = await gnosisSafeProxyInstance.getNonce(); + + const safeTxData = await gnosisSafeProxyInstance.getSafeTxData( + tokenHolderProxy, + 0, + logoutExData, + 0, + 0, + 0, + 0, + config.NULL_ADDRESS, + config.NULL_ADDRESS, + nonce + ); + + const ownerSignature = await currentOwner.signEIP712TypedData(safeTxData); + const result = await gnosisSafeProxyInstance.execTransaction( + tokenHolderProxy, + 0, + logoutExData, + 0, + 0, + 0, + 0, + config.NULL_ADDRESS, + config.NULL_ADDRESS, + ownerSignature.signature, + txOptions + ); + + const txReceipt = await auxiliaryWeb3.eth.getTransactionReceipt(result.transactionHash); + + abiDecoder.addABI(abiBinProvider.getABI('GnosisSafe')); + abiDecoder.addABI(abiBinProvider.getABI('TokenHolder')); + + const decodedResult = abiDecoder.decodeLogs(txReceipt.logs); + + const sessionsLoggedOutEvent = JSON.parse(JSON.stringify(decodedResult)); + + assert.strictEqual(sessionsLoggedOutEvent[0].name, 'SessionsLoggedOut', 'Incorrect event emitted'); + assert.strictEqual(sessionsLoggedOutEvent[0].events[0].value, '2', 'Incorrect sessionwindow value'); + }); + // wallet9, wallet8 are the owners. it('Should change required threshold', async function() { // Owners already added should be equal or less than the threshold limit. Here, we have 2-owners in the gnosisSafe proxy. From c8e09963d9367b70db9f646f94e89c6abc47ec96 Mon Sep 17 00:00:00 2001 From: Gulshan Vasnani Date: Mon, 18 Feb 2019 11:01:21 +0530 Subject: [PATCH 2/4] Updated change log --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e591859..ecd7103 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Version 0.10.0 +MultiSig Operation: Logout all sessions([104](https://github.com/OpenSTFoundation/openst.js/pull/104)) Rule setup: Pricer rule setup and interaction([66](https://github.com/OpenSTFoundation/openst.js/pull/66)) User setup: Company to User Implementation([68](https://github.com/OpenSTFoundation/openst.js/pull/68)) Direct transfer of tokens using TokenRules contract([67](https://github.com/OpenSTFoundation/openst.js/pull/67)) From 59a42cfae6e9dcd95c46bc60e4c18c04681cd85d Mon Sep 17 00:00:00 2001 From: Gulshan Vasnani Date: Mon, 18 Feb 2019 21:19:04 +0530 Subject: [PATCH 3/4] Refactoring done to retrieve tokenholder instance --- lib/helper/TokenHolder.js | 24 ++++++++++----- utils/docker-compose.yml | 8 +++++ utils/docker.js | 65 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 utils/docker-compose.yml create mode 100644 utils/docker.js diff --git a/lib/helper/TokenHolder.js b/lib/helper/TokenHolder.js index 0108f1a..6f72fa7 100644 --- a/lib/helper/TokenHolder.js +++ b/lib/helper/TokenHolder.js @@ -55,8 +55,7 @@ class TokenHolder { getAuthorizeSessionExecutableData(sessionKey, spendingLimit, expirationHeight) { const oThis = this; - const jsonInterface = oThis.abiBinProvider.getABI(tokenHolderContractName), - contract = new oThis.auxiliaryWeb3.eth.Contract(jsonInterface, oThis.tokenHolderProxy), + const contract = oThis.getTokenHolderInstance(), executableData = contract.methods.authorizeSession(sessionKey, spendingLimit, expirationHeight).encodeABI(); return executableData; @@ -72,8 +71,7 @@ class TokenHolder { getRevokeSessionExecutableData(sessionKey) { const oThis = this; - const jsonInterface = oThis.abiBinProvider.getABI(tokenHolderContractName), - contract = new oThis.auxiliaryWeb3.eth.Contract(jsonInterface, oThis.tokenHolderProxy), + const contract = oThis.getTokenHolderInstance(), executableData = contract.methods.revokeSession(sessionKey).encodeABI(); return executableData; @@ -87,8 +85,7 @@ class TokenHolder { getLogoutExecutableData() { const oThis = this; - const jsonInterface = oThis.abiBinProvider.getABI(tokenHolderContractName), - contract = new oThis.auxiliaryWeb3.eth.Contract(jsonInterface, oThis.tokenHolderProxy), + const contract = oThis.getTokenHolderInstance(), executableData = contract.methods.logout().encodeABI(); return executableData; @@ -146,10 +143,23 @@ class TokenHolder { _executeRuleRawTx(to, data, nonce, r, s, v) { const oThis = this; + const contract = oThis.getTokenHolderInstance(); + + return contract.methods.executeRule(to, data, nonce, r, s, v); + } + + /** + * Method to get tokenholder contract instance. + * + * @returns {oThis.auxiliaryWeb3.eth.Contract} + */ + getTokenHolderInstance() { + const oThis = this; + const jsonInterface = oThis.abiBinProvider.getABI(tokenHolderContractName), contract = new oThis.auxiliaryWeb3.eth.Contract(jsonInterface, oThis.tokenHolderProxy); - return contract.methods.executeRule(to, data, nonce, r, s, v); + return contract; } } diff --git a/utils/docker-compose.yml b/utils/docker-compose.yml new file mode 100644 index 0000000..2dd9812 --- /dev/null +++ b/utils/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3" + +services: + + geth_node_origin: + image: augurproject/dev-node-geth:v1.8.18 + ports: + - "8546:8545" \ No newline at end of file diff --git a/utils/docker.js b/utils/docker.js new file mode 100644 index 0000000..169b0a1 --- /dev/null +++ b/utils/docker.js @@ -0,0 +1,65 @@ +// / Copyright 2019 OpenST Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ---------------------------------------------------------------------------- +// +// http://www.simpletoken.org/ +// +// ---------------------------------------------------------------------------- + +'use strict'; + +const childProcess = require('child_process'); +const path = require('path'); +const waitPort = require('wait-port'); +const config = require('./configReader'); + +const composeFilePath = path.join(__dirname, './docker-compose.yml'); +const asyncSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +// docker-compose is expected to be available in the test environment +// (e.g., it is installed automatically in Travis CI's "trusty" build) +const dockerSetup = () => { + const dockerCompose = childProcess.spawn('docker-compose', ['-f', composeFilePath, 'up', '--force-recreate']); + + if (process.env.TEST_STDOUT) { + dockerCompose.stdout.on('data', (data) => { + process.stdout.write(data); + }); + dockerCompose.stderr.on('data', (data) => { + process.stderr.write(data); + }); + } + + const waitForOriginNode = waitPort({ port: config.originPort, output: 'silent' }); + return Promise.all([waitForOriginNode]) + .then(() => asyncSleep(5000)) + .then(() => ({ + rpcEndpointOrigin: `http://localhost:${config.originPort}` + })); +}; + +const dockerTeardown = () => { + const dockerComposeDown = childProcess.spawnSync('docker-compose', ['-f', composeFilePath, 'down']); + if (process.env.TEST_STDOUT) { + process.stdout.write(dockerComposeDown.stdout); + process.stderr.write(dockerComposeDown.stderr); + } +}; + +module.exports = { + asyncSleep, + dockerSetup, + dockerTeardown +}; From 126cbf855c1494cb91336227f21ea83b339224bd Mon Sep 17 00:00:00 2001 From: Gulshan Vasnani Date: Mon, 18 Feb 2019 21:22:30 +0530 Subject: [PATCH 4/4] Removed docker files --- utils/docker-compose.yml | 8 ----- utils/docker.js | 65 ---------------------------------------- 2 files changed, 73 deletions(-) delete mode 100644 utils/docker-compose.yml delete mode 100644 utils/docker.js diff --git a/utils/docker-compose.yml b/utils/docker-compose.yml deleted file mode 100644 index 2dd9812..0000000 --- a/utils/docker-compose.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: "3" - -services: - - geth_node_origin: - image: augurproject/dev-node-geth:v1.8.18 - ports: - - "8546:8545" \ No newline at end of file diff --git a/utils/docker.js b/utils/docker.js deleted file mode 100644 index 169b0a1..0000000 --- a/utils/docker.js +++ /dev/null @@ -1,65 +0,0 @@ -// / Copyright 2019 OpenST Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ---------------------------------------------------------------------------- -// -// http://www.simpletoken.org/ -// -// ---------------------------------------------------------------------------- - -'use strict'; - -const childProcess = require('child_process'); -const path = require('path'); -const waitPort = require('wait-port'); -const config = require('./configReader'); - -const composeFilePath = path.join(__dirname, './docker-compose.yml'); -const asyncSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); - -// docker-compose is expected to be available in the test environment -// (e.g., it is installed automatically in Travis CI's "trusty" build) -const dockerSetup = () => { - const dockerCompose = childProcess.spawn('docker-compose', ['-f', composeFilePath, 'up', '--force-recreate']); - - if (process.env.TEST_STDOUT) { - dockerCompose.stdout.on('data', (data) => { - process.stdout.write(data); - }); - dockerCompose.stderr.on('data', (data) => { - process.stderr.write(data); - }); - } - - const waitForOriginNode = waitPort({ port: config.originPort, output: 'silent' }); - return Promise.all([waitForOriginNode]) - .then(() => asyncSleep(5000)) - .then(() => ({ - rpcEndpointOrigin: `http://localhost:${config.originPort}` - })); -}; - -const dockerTeardown = () => { - const dockerComposeDown = childProcess.spawnSync('docker-compose', ['-f', composeFilePath, 'down']); - if (process.env.TEST_STDOUT) { - process.stdout.write(dockerComposeDown.stdout); - process.stderr.write(dockerComposeDown.stderr); - } -}; - -module.exports = { - asyncSleep, - dockerSetup, - dockerTeardown -};