Is there documentation related to the built-in multisig wallet contract in the Mist Wallet? I see there are many additional functions in this contract like changing / adding / removing owners etc. However, it's not clear how to use these other features though.
Mist Wallet – Documentation on Multisig Wallet Features
mistmultisignaturewallets
Related Solutions
I believe you can just kill
the contract. Please read to the end before attempting it.
Steps to take
- From https://www.myetherwallet.com/#contracts, enter
0xaD24B48f33746e68BDCDC2E7F5857eE0EeEc2EFB
as the contract address, and then paste the ABI. You can copy the whole thing from here: https://etherscan.io/address/0xaD24B48f33746e68BDCDC2E7F5857eE0EeEc2EFB#code. (Click the "copy" button to the right of "Contract ABI.") - Then pick the function "kill," and enter the address you want to send the ether to (so make sure it's an address you have the private key for) as a value for the
_to
field. Be really careful about this step. - Next, unlock the account using the Keystore/JSON file + password or whatever form you have the private key in.
- Finally, click "WRITE" at the bottom of the page, and then "Generate Transaction." From there, you can either copy the raw transaction (to submit it later) or go ahead and submit it to the network.
Additional notes
For added security, consider downloading an offline version of MyEtherWallet and doing this all locally (and ideally disconnected from the network). You can download an offline version via a link in the footer on https://www.myetherwallet.com. In that last step above, you can copy down the raw transaction, and then go back online (or transfer it to another computer) to submit it. Etherscan has a nice tool for pasting in a raw transaction and sending it out to the network.
Use ETH Gas Station to figure out a good gas price. You can set the gas price on MEW via a dropdown in the upper right corner of the page. At the time I write this, 5 or 6 gwei seems good.
EDIT
You can do the same thing with the execute
function. Pass a _to
address that will receive the funds, and a _value
of how much ether to send (in wei). _data
can actually be anything, but I believe 0x0
is the right value to just send an empty bytes
.
I can only answer very specific to the Safe, as this highly depends on the smart contract wallet.
With the Safe there are 2 possible approaches.
Starting with version 1.3.0 of the Safe it is possible to add a Guard. This guard could be controlled to prevent any transactions while it is in the "inactive" state.
Another solution would be to implement EIP-1271 (the legacy version) on a contract that controls the active or inactive state. That contract would revert when isValidSignature
is called in the inactive
state and the expected value otherwise.
Here an example how this can be done either with the Guard approach or with EIP-1271 signatures: https://gist.github.com/rmeissner/26bae7deaac62db764abc9a03902094e
Best Answer
Smart contracts expose multiple functions as a public API. In general, to interact with any contract, its ABI (different from API) must be used to properly encode/decode messages to/from a contract. This is true regardless of function or event.
The Mist multisig wallet is based on the code at https://raw.githubusercontent.com/ethereum/dapp-bin/master/wallet/wallet.sol. However, this makes use of many Solidity language features, so understanding it is not as straightforward as reading a single contract's code.
Mist exposes most of the contract functionality via an HTML interface embedded in the application. If you want to arbitrarily interact with functions not provided in the default interface, you can use web3.js or some other high-level tool.