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 |
---|---|
EDGE Wallet |
|
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 |