Request for Signature

This is an early draft of the concept to stimulate discussion. It will likely significantly evolve before it’s considered adequate.

Overview

Today FIO Request is used as a Request for Funds. It contains structured information which the receiving wallet is able to interpret to execute a standard token transfer on any blockchain. Some information is standardized to ensure all wallets have the same understanding of the data, specifically blockchain/token codes.

What if that concept was extended to introduce a new type of FIO Request, a Request for Signature. Similarly to Request for Funds, it would contained structured information which the receiving wallet could interpret to execute different type of actions (other than transfer) on other chains.

Request for Signature Types

Smart Contract Interaction Request

This request type would contain information required for the wallet to construct and broadcast a valid blockchain transaction executing a specific action on a specific smart contract on a specific blockchain.

Here’s an example of what the payloads could look like for 2 different blockchains:

  • Example for ETH

    • requestor_fio_address: contract@curve

    • requestee_fio_address: bob@edge

    • chain_code: ETH

    • smart_contract_address: 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599

    • action: approve

    • action_params

      • pub_address: 0x67bd5c58ac3166da9b31363f3ec0eba5097ada38

      • amount: 10

    • user_description: You are allowing Curve.fi to withdraw up to 10 WBTC tokens from your account.

  • Example for EOS

    • requestor_fio_address: voting@someapp

    • requestee_fio_address: bob@edge

    • chain_code: EOS

    • smart_contract_address: eosio

    • action: voteproducer

    • action_params

      • voter: landandocean

      • proxy: brockpierce1

    • user_description: You are proxying all your EOS tokens to brockpierce1

The wallet will be able to interpret the data to:

  • Display a dialog to the user to obtain required approval.

  • Construct and broadcast a valid blockchain transaction.

 

Multisignature Request

If a particular blockchain handles multisig via a smart contract (e.g. Ethereum, EOS, FIO), Smart Contract Interaction Request above can be used and sent simultaneously to multiple recipients.

For blockchains which handle multisigs offchain (e.g. Bitcoin) a transaction to be signed needs to be passed. Here’s an example of what the payloads could look like:

  • requestor_fio_address: alice@acme

  • requestee_fio_address: bob@edge

  • chain_code: BTC

  • memo: Please approve payment for invoice 123 in the amount of 10 BTC.

  • tx

    • Partially signed transaction needing to be signed can be put on FIO Chain or stored off-chain with url and hash stored on FIO Chain (same as FIO Request for funds)

Record Signature Data

This action would be similar to current FIO Chain record_obt_data and would record transaction ids from other blockchains as proof of executing requested smart contract transactions.

Multisignature Request it would contain signatures, which could be combined with other signatures to properly execute.

Here’s an example of what the payloads could look like:

  • requestor_fio_address: alice@acme

  • requestee_fio_address: bob@edge

  • chain_code: BTC

  • memo: Approved.

  • hash:

  • offline_url:

  • fio_request_id: 123456

  • obt_id:

  • signature: xxx

Example UI

 

Wallet Feedback

Wallet

Feedback

Wallet

Feedback

EDGE Wallet

  • Interested in Multi-signature Request, including setting up a new multi-sig wallet.

  • Concerned that the Request for Signature has to be signed by a FIO Private Key, which means a central entity has to generate it. This could be alleviate by enabling smart contracts to initiate those requests via oracle network, as described here.

  • Recommended more discussions with dApp developers.

Guarda

At the moment, I'm comparing with walletconnect. It is supported in many services already, and does not require fee for message validation. It seems that their offer is better. However, I have a feeling that this service is not very stable. Despite the fact that many wallets have connected it, it does not work for everyone. I'm not sure yet if this is a problem with wallets or walletconnect. But if you make a service like this that works stably, with all currencies, and is easy to connect to, I'm sure it will be a very strong product.

Trust Wallet

Requested

Coinomi

Requested

Shapeshift

Requested