Skip to main content

MVM

警告

mvm 相关调用 sdk 最低版本: >= 3.1.3

1. 无需资产的合约调用#

指不需要资产的合约调用。只是为了修改 mvm 合约的状态而调用。

  1. 默认是使用 0.00000001 CNB 来做合约调用,调用完毕之后会尝试退回。
  2. 如果期望使用其他币种和数量来调用,请参见这里

1. Messenger 用户调用#

client.paymentGeneratorByContract({  contracts: [    {      address: '0x2E8f70631208A2EcFC6FA47Baf3Fde649963baC7',      method: 'addAny',      types: ['uint256'],      values: ['10'],    },  ],});

返回值:

{  "type": "payment",  "trace_id": "5f4a39ea-69c3-48aa-ab1f-e19bf64738da",  "asset_id": "965e5c6e-434c-3fa9-b780-c50f43cd955c",  "amount": "0.00000001",  "threshold": 5,  "receivers": [    "d5a3a450-5619-47af-a3b1-aad08e6e10dd",    "9d4a18aa-9b0a-40ed-ba57-ce8fbbbc6deb",    "2f82a56a-7fae-4bdd-bc4d-aad5005c5041",    "f7f33be1-399a-4d29-b50c-44e5f01cbb1b",    "23a070df-6b87-4b66-bdd4-f009702770c9",    "2385639c-eac1-4a38-a7f6-597b3f0f5b59",    "ab357ad7-8828-4173-b3bb-0600c518eab2"  ],  "memo": "G9Zwhyds4yY7kzOqM34hKkAAAAAAA8AAEuj3BjEgii7PxvpHuvP95kmWO6xwAkd60KqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK",  "created_at": "2022-08-19T02:25:07.410174964Z",  "status": "pending",  "code_id": "bf7a02fa-7ae5-4fe8-be2e-0d42bcfcaccf"}

说明:

  1. 让 mixin messenger 的用户打开 mixin://codes/bf7a02fa-7ae5-4fe8-be2e-0d42bcfcaccf 链接,完成支付之后,合约即调用成功。
  2. bf7a02fa-7ae5-4fe8-be2e-0d42bcfcaccf 的来源是上述返回值中的 code_id
  3. 合约调用需要交易,默认的币种是 CNB,数量是最小单位 0.00000001,或者指定任何其他的资产和数量都可以。
  4. 所有合约调用结束之后,会尝试退还转入的资产。也就是说如果合约本身没有使用上述调用的 0.00000001 CNB 的话,会尝试给调用者退还转入的资产。

2. 机器人用户调用#

async function main() {  const txInput = await client.paymentGeneratorByContract({    contracts: [      {        address: '0x2E8f70631208A2EcFC6FA47Baf3Fde649963baC7',        method: 'addAny',        types: ['uint256'],        values: ['10'],      },    ],    payment: {      type: 'tx',    },  });  const res = await client.transaction(txInput);}

txInput 的值为:

{  "asset_id": "965e5c6e-434c-3fa9-b780-c50f43cd955c",  "amount": "0.00000001",  "trace_id": "3b8d0f7e-e10a-4913-817e-215b8c09a451",  "memo": "G9Zwhyds4yY7kzOqM34hKkAAAAAAA8AAEuj3BjEgii7PxvpHuvP95kmWO6xwAkd60KqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK",  "opponent_multisig": {    "receivers": [      "d5a3a450-5619-47af-a3b1-aad08e6e10dd",      "9d4a18aa-9b0a-40ed-ba57-ce8fbbbc6deb",      "2f82a56a-7fae-4bdd-bc4d-aad5005c5041",      "f7f33be1-399a-4d29-b50c-44e5f01cbb1b",      "23a070df-6b87-4b66-bdd4-f009702770c9",      "2385639c-eac1-4a38-a7f6-597b3f0f5b59",      "ab357ad7-8828-4173-b3bb-0600c518eab2"    ],    "threshold": 5  },  "pin": "/xxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxxxxxxx"}

res 的值为:

{  "type": "raw",  "snapshot_id": "f16a01ab-7b53-43ba-9bf4-6f8c585d87e2",  "opponent_key": "",  "opponent_receivers": [    "d5a3a450-5619-47af-a3b1-aad08e6e10dd",    "9d4a18aa-9b0a-40ed-ba57-ce8fbbbc6deb",    "2f82a56a-7fae-4bdd-bc4d-aad5005c5041",    "f7f33be1-399a-4d29-b50c-44e5f01cbb1b",    "23a070df-6b87-4b66-bdd4-f009702770c9",    "2385639c-eac1-4a38-a7f6-597b3f0f5b59",    "ab357ad7-8828-4173-b3bb-0600c518eab2"  ],  "opponent_threshold": 5,  "asset_id": "965e5c6e-434c-3fa9-b780-c50f43cd955c",  "amount": "-0.00000001",  "opening_balance": "1429369.81742709",  "closing_balance": "1429369.81742708",  "trace_id": "3c9cfd32-8757-4059-919e-ee9925e7c24e",  "memo": "G9Zwhyds4yY7kzOqM34hKkAAAAAAA8AAEuj3BjEgii7PxvpHuvP95kmWO6xwAkd60KqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK",  "state": "signed",  "created_at": "1970-01-01T00:03:39+00:03",  "transaction_hash": "5f06dce2278cfa43f00e11a514aecb12fc88ad498b847944fa2dabd7c8644f83",  "snapshot_hash": "",  "snapshot_at": "0001-01-01T00:00:00Z"}

不难发现,其实合约的调用本质上就是一笔多签交易,几个“节点”监听到了这笔签名的交易之后,会根据 memo 的信息解析出合约的相关信息,然后调用合约的方法。

2. 需要(指定)资产的合约调用#

Messneger用户调用机器人用户的调用 请参见上一小节, 其实就是多了一个参数 payment.type='tx', 默认是 payment

这里默认使用生成 code_id 来让 Messenger 用户调用合约

const payment = await client.paymentGeneratorByContract({  contracts: [    {      address: '0x2E8f70631208A2EcFC6FA47Baf3Fde649963baC7',      method: 'addAny',      types: ['uint256'],      values: ['10'],    },  ],  payment: {    asset: 'c94ac88f-4671-3976-b60a-09064f1811e8',    amount: '1',    trace: client.newUUID(),  },});
{  "type": "payment",  "trace_id": "1dc2b4d3-0d41-4bb5-a524-1b028b9fae8e",  "asset_id": "c94ac88f-4671-3976-b60a-09064f1811e8",  "amount": "1",  "threshold": 5,  "receivers": [    "d5a3a450-5619-47af-a3b1-aad08e6e10dd",    "9d4a18aa-9b0a-40ed-ba57-ce8fbbbc6deb",    "2f82a56a-7fae-4bdd-bc4d-aad5005c5041",    "f7f33be1-399a-4d29-b50c-44e5f01cbb1b",    "23a070df-6b87-4b66-bdd4-f009702770c9",    "2385639c-eac1-4a38-a7f6-597b3f0f5b59",    "ab357ad7-8828-4173-b3bb-0600c518eab2"  ],  "memo": "G9Zwhyds4yY7kzOqM34hKkAAAAAAA8AAEuj3BjEgii7PxvpHuvP95kmWO6xwAkd60KqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK",  "created_at": "2022-08-19T02:53:10.346200826Z",  "status": "pending",  "code_id": "105b07fa-bc1b-4083-96b8-7d3b35390b50"}