Multisig

The following is a step-by-step guide for how to convert a regular FIO account into a “2 out of 3” multisig (any 2 signatures of the 3 provided accounts are required to execute a transaction) on the FIO Chain. All transactions in the steps below are submitted using /push_transaction API method.

Step 1: Change owner permissions of account

This call with replace owner permission with 3 different accounts. Please note that those accounts had to been previously created on the FIO Chain by sending funds to them or registering a FIO Address.


  {
    "action": "updateauth",
    "json": {
      "account": "aewgyixsunjo",
      "permission": "owner",
      "parent": "",
      "auth": {
        "threshold": 2,
        "keys": [],
        "waits": [],
        "accounts": [
          {
            "permission": {
              "actor": "ianyjw312vbg",
              "permission": "active"
            },
            "weight": 1
          },
          {
            "permission": {
              "actor": "rcwh3tqbqcpu",
              "permission": "active"
            },
            "weight": 1
          },
          {
            "permission": {
              "actor": "w5bhllejse2f",
              "permission": "active"
            },
            "weight": 1
          }
        ]
      },
      "max_fee": 10000000
    }
  }

Step 2: Change active permissions of account

This call with replace active permission with 3 different accounts. Please note that those accounts had to been previously created on the FIO Chain by sending funds to them or registering a FIO Address.


  {
    "action": "updateauth",
    "json": {
      "account": "aewgyixsunjo",
      "permission": "active",
      "parent": "owner",
      "auth": {
        "threshold": 2,
        "keys": [],
        "waits": [],
        "accounts": [
          {
            "permission": {
              "actor": "ianyjw312vbg",
              "permission": "active"
            },
            "weight": 1
          },
          {
            "permission": {
              "actor": "rcwh3tqbqcpu",
              "permission": "active"
            },
            "weight": 1
          },
          {
            "permission": {
              "actor": "w5bhllejse2f",
              "permission": "active"
            },
            "weight": 1
          }
        ]
      },
      "max_fee": 10000000
    }
  }

Step 3: Propose a multisig transaction

This call proposes a transaction of spending funds.


  {
    "code": "eosio.msig",
    "action": "propose",
    "args": {
      "proposer": "ianyjw312vbg",
      "proposal_name": "propcwh3",
      "requested": [
        {
          "actor": "w5bhllejse2f",
          "permission": "active"
        },
        {
          "actor": "rcwh3tqbqcpu",
          "permission": "active"
        }
      ],
      "trx": {
        "chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
        "expiration": "2019-12-15T21:48:47",
        "ref_block_num": 266016,
        "ref_block_prefix": 102118591,
        "max_net_usage_words": 0,
        "max_cpu_usage_ms": 0,
        "delay_sec": 0,
        "context_free_actions": [],
        "actions": [
          {
            "account": "fio.token",
            "name": "trnsfiopubky",
            "authorization": [
              {
                "actor": "aewgyixsunjo",
                "permission": "active"
              }
            ],
            "data": "3546494f385052653457525a4a6a356d6b656d367156474b79764e466750734e6e6a4e4e366b50686836456143707a4356696e354a6a40420f000000000080b2e60e0000000040dfd4b83bcfb83200"
          }
        ],
        "transaction_extensions": []
      },
      "max_fee": 10000000
    }
  }

Step 4: Account 1 approves transaction

This call approves the transaction of spending funds.


  {
    "code": "eosio.msig",
    "action": "approve",
    "args": {
      "proposer": "ianyjw312vbg",
      "proposal_name": "propcwh3",
      "level": {
        "actor": "w5bhllejse2f",
        "permission": "active"
      },
      "max_fee": 10000000
    }
  }

Step 5: Account 2 approves transaction

This call approves the transaction of spending funds.


  {
    "code": "eosio.msig",
    "action": "approve",
    "args": {
      "proposer": "ianyjw312vbg",
      "proposal_name": "propcwh3",
      "level": {
        "actor": "rcwh3tqbqcpu",
        "permission": "active"
      },
      "max_fee": 10000000
    }
  }

Step 6: Transaction is executed

This call executes the transaction of spending funds.


  {
    "code": "eosio.msig",
    "action": "exec",
    "args": {
      "proposer": "ianyjw312vbg",
      "proposal_name": "propcwh3",
      "executer": "ianyjw312vbg",
      "max_fee": 10000000
    }
  }