Possible account functionality brainstorm

Possible account functionality brainstorm

I’m gathering a list of things that an account could do, that somebody might find useful.

The list below is not ordered or prioritised in any way. Some ideas might only be marginally useful. Please post ideas and suggestions in the comments, and I’ll update this list with the ideas posted.

  • Safe mode that prevents ETH and ERC20 tokens from being sent anywhere other than the multisig owners

  • Sweep: enable the transfer of all assets in a wallet to a new owner in one sweep without revealing private keys.

  • Cosigner: a variant of MultiSig where exactly two signatures are required. Could be employed for implementing further functionality via another contract that acts as a cosigner.

  • Contract as a signer: in multi-sig, one or more of the signing parties can be another contract.

  • Multisig: require X out of Y owners to sign a transaction before it executes.

  • Multisig off chain signing: signatures computed off-chain and supplied as data for a single transaction. Advantage is less gas cost because only a single transaction is needed, disadvantage is the effort required to coordinate the off-chain signature computation.

  • Social recovery (user benefit: recovering without a seed phrase) https://discuss.status.im/t/account-recovery-use-cases-social-recovery-and-dead-mans-switch/1797

  • Dead man’s switch recovery: (user benefit: recovering without a seed phrase) If an account has no activity for X time, then anyone who controls one of a whitelisted group of addresses can start the dead man’s switch recovery process. After Y time, if the account has still seen no activity, then the account funds are distributed to an address or set of addresses. Any account activity (e.g. if the account being recovered signs one transaction) cancels the dead man’s switch recovery process.

  • Third party control: a central authority retains complete control over the wallet, in addition to the day to day user. Possible usecase in retail or enterprise settings where an employee may be delegated control of a wallet, but the corporate entity needs to retain overall control of the wallet so that for example the wallet can be drained by the corporation if the employee is fired.

  • Forwarding wallets: additional addresses for receiving assets that are transferred to a main wallet. Not sure why this would be useful??

  • Privacy account: all deposits to the privacy account are sent to a mixer like tornado cash, wallet only stores mixer receipts. Sending funds from a privacy account involves the wallet sending deposit receipt(s) and the destination address to the mixer contract so that the mixer contract can send the actual funds to the destination using a gas relayer. Note mixer receipts will be denominated in set amounts e.g. 0.1 ETH, 1 ETH, 5 ETH, 10 ETH, etc… and the User and/or the wallet would need to determine what denominations to be stored and used. This has a gas cost versus utility tradeoff.

  • Flexible transactions: the wallet is able to execute arbitrary calls after adequate authorization

  • Time based limits: e.g. daily or monthly limits which additional authorisation is required to exceed

  • Time locking: some funds can’t be moved until after X date. One usecase is vesting periods

  • Paused mode: functionality to enable a wallet to be put into a ‘paused mode’ e.g. a temporary lock on outgoing transfers. Usecase: 3rd party could pause a wallet if it’s owner was kidnapped, both owner and 3rd party would be required to sign any outgoing transactions until the wallet was taken out of ‘paused mode’ (by both the owner and 3rd party signing)

  • Updatable wallet: enable User to switch to a newer version of the wallet contract.

  • User has fine grained control over what account info to expose to dapp: See EIP-1102 https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md

  • Auto asset forwarding: wallet can automatically forward funds according to a set of rules e.g. whenever SNT is received into this wallet forward to address W, or as long as wallet ETH balance is greater than X, forward Y amount of funds each month to address Z. Basically easy fund transfer scripting for folks who don’t want to program smart contracts. Perhaps using something like the MakeCode interface combined with https://atomic.ninja/ ?

  • Destroy function: makes the wallet permanently inaccessible, all funds in the wallet and all funds sent to the wallet after the destroy function is called are lost. Interesting history of destroy function from griffgreen here Could possibly be used in combination with Status Panic Lock

  • Hardware key support

  • Cooling off period: transactions over say X amount in an hour or day are not sent immediately, rather they are queued to be sent after a time delay. During this cooling off period the User can cancel transactions they have already “sent”.

  • Advanced token support: Require the recipient to provide particular functions that are called before the actual transfer of the token

  • Exchange integration (user benefit: being able to exchange assets easily) Allow the user to exchange tokens inside their wallet or when conducting a transfer e.g. the User could send 1000SNT and the reciepient could recieve the value of 1000SNT in ETH. Useful for Keycard Cash when a Merchant might be requesting payment in say DAI and the User only has say SNT in their Keycard Cash account. Or to enable a user to make a small SNT purchase (say a sticker or a name) when they only have ETH.

  • Improved NFT support user benefit: a more visual way to showcase collectibles and support for a wider range of collectibles

  • token value trends being able to easily see how much any token’s value has changed. e.g. 24h up or down, 7day up or down, mini trend graph, etc…

  • super hot account An account for microtransactions that would allow the User to make low value transaction from without any authorization e.g. for functionality like SNT reactions. Account would only store a very low value of tokens e.g. $1 or $2 worth in total. Also perhaps max transaction value without authorization?. User would be prompted to top up the wallet when the funds run low, the top up would require authentication. Requires L2 to be viable due to L1 transaction costs.

  • track DeFi investments from inside wallet An easier way for Users to get an overview of how all their DeFi investments are performing without leaving their wallet. Could dapp notifications through a chat API be part of a solution?

  • MultiSend transactions a mechanism to enable a User to send tokens to different Ethereum addresses in a single transaction. Use cases include airdrops. See https://multisender.app/ for an example implementation

  • Balancer Pool integration so that your multisig/dao can act as a Balancer pool earning fees, and auto balancing it’s assets according to a specific set of holdings… what would be great of course is to make it easy to changes the % holdings at any time without having to completely redeploy the wallet.
    This could important functionality for a multicoin future where Users decide what currencies they want to hold and at what %ages… and then Users can just spend as they need and the wallet will be smart and converts tokens into what the vender wants and then magically the market pays you to rebalance your holdings!
    Imagine a world where every app, community, every store, every workplace, (every person!) had their own token economy and then they could hold the tokens they cared about in their reserve but frictionlessly exchange their tokens as needed to interact in the multieconomic system…

This is the idea of discouraging hackers… It’s a very niche use case but since you are asking… This design pattern was used by the Bitcoin Vault made by Gun, and actually implemented in DASH

“Now, the astute reader will ask what happens when Harry is really really good, and he lies in wait to steal not just your vault key, but also your recovery key. That is, he has thoroughly pwnd you and, as far as the network is concerned, is indistinguishable from you. Vaults protect you even in this case. The recovery keys have a similar lock period, allowing you to perpetually revert every transaction Harry makes. Unfortunately, at this point, Harry can do the same and revert every transaction you make. To avoid a perpetual standoff, the recovery keys can also burn the funds, so no one gets the money. The upshot is that Harry is not going to be able to collect a dime of proceeds from his theft. And this, in turn, means that Harry is unlikely to target vaults in the first place, because there is no positive outcome where he gets to keep the proceeds.”

The big thing missing here IMO is a Balancer Pool integration… so that your multisig/dao can act as a Balancer pool earning fees, and auto balancing it’s assets according to a specific set of holdings… what would be great of course is to make it easy to changes the % holdings at any time without having to completely redeploy the wallet (I assume this is on Balancer’s roadmap)

But this is important functionality for the multicoin future I hope the crypto space is going to… where you decide what currencies you want to hold and at what %ages… and then you can just spend as you need and the wallet will be smart and convert the tokens into what the vender wants and then magically the market pays you to rebalance your holdings!

Imagine a world where every app, community, every store, every workplace, (every person!) had their own token economy and then they could hold the tokens they cared about in their reserve but frictionlessly exchange their tokens as needed to interact in the multieconomic system…

Balancer is going to make this possible, definitely get it in there!!! (I hope… i honestly have never heard them talk about this but their system is the biggest leap forward to make this dream a reality)

2 Likes

Destroy function

Works well with Status panic lock

1 Like

Could you see this as a wallet setting it’s “asset allocation target” and then rebalancing as part of each transaction?

example: A wallet sets it’s target for 50% SNT, and 50% ETH. Let’s assume a balancer pool already exists with those targets. It needs to do a transaction that requires $50 in DAI, so behind the scenes perhaps as a proxy contract it swaps $50 in 50SNT/50ETH pool token for $50 in Dai and then executes the transaction?

On each transaction the wallet does a clean up on other tokens that may have been received between transaction and rebalances to the target?

Hi @griffgreen thanks for your comment, I really like your balancer pool integration idea!! :slight_smile:

I’ve updated the post to include the balancer idea (it took a while to get permissions to edit the original post, but done now :wink: )

Also really interesting to learn the history of the destroy function, thanks!

Interesting idea, I’ve added it to the idea list