Web3 : 多签合约接口说明

合约地址 https://sepolia.etherscan.io/address/0x3496A4572432674333CcF2c57c3bFe4c37711249#code


合约接口

1 多签注册合约

interface IERCSignerManage {
    struct Signer {
        address[] Signers;
        uint threshold;

    }

    event CreateSigner(address[] Signer, uint threshold,address sender, uint256 indexed userId);

    event AddSigner(address Signer,address sender);

    event RemoveSigner(address Signer,address sender);

    //设置多签账号
     function setSigners(address[] memory Signer, uint threshold,uint256 userId) external;
     function setSignersWithOwner(address[] memory Signer,address owner, uint threshold,uint256 userId) external;

}

合约abi

[
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "Signer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "AddSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "Signer",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "userId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string[]",
          "name": "names",
          "type": "string[]"
        }
      ],
      "name": "CreateOwnSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "Signer",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "userId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string[]",
          "name": "names",
          "type": "string[]"
        }
      ],
      "name": "CreateSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "Signer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RemoveSigner",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "Signer",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "names",
          "type": "string[]"
        },
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "userId",
          "type": "uint256"
        }
      ],
      "name": "setSigners",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "Signer",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "names",
          "type": "string[]"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "userId",
          "type": "uint256"
        }
      ],
      "name": "setSignersWithOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ]

2.多签交易合约

interface IERCMulSigner {
    event CreateMulSigner(address sender, uint txHash, uint txId);

    event ForceOverMulSigner(address sender, uint txHash);

    event ApproveMulSigner(address sender, uint txHash, uint txId);

    event StartMulSigner(address sender, uint txHash, uint txId);

    event RejectMulSigner(uint txHash, uint txId);

    event ExecuteMulSigner(uint txHash, uint txId);

    enum SignerOp {
        Approve,
        Reject
    }

    //创建多签
    function createMulSignerTx(
        uint amount,
        uint when,
        address to,
        string memory blank,
        MulTx.TxType txType,
        uint txId
    ) external payable;

    function createMulSignerTxWithSiger(
        uint amount,
        uint when,
        address to,
        string memory blank,
        MulTx.TxType txType,
        uint txId,
        address owner
    ) external payable;

    //结束多签
    function forceOverMulSigner(uint txHash) external;

    // 提交签名
    function submitMulSigner(uint txHash, IERCMulSigner.SignerOp op) external;

     //审核多签
    function startMulSigner(uint txHash) external;
}

合约abi

[
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        }
      ],
      "name": "ApproveMulSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        }
      ],
      "name": "CreateMulSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        }
      ],
      "name": "ExecuteMulSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        }
      ],
      "name": "ForceOverMulSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        }
      ],
      "name": "RejectMulSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        }
      ],
      "name": "StartMulSigner",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "when",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "blank",
          "type": "string"
        },
        {
          "internalType": "enum MulTx.TxType",
          "name": "txType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        }
      ],
      "name": "createMulSignerTx",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "when",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "blank",
          "type": "string"
        },
        {
          "internalType": "enum MulTx.TxType",
          "name": "txType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "txId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "createMulSignerTxWithSiger",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        }
      ],
      "name": "forceOverMulSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        }
      ],
      "name": "startMulSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txHash",
          "type": "uint256"
        },
        {
          "internalType": "enum IERCMulSigner.SignerOp",
          "name": "op",
          "type": "uint8"
        }
      ],
      "name": "submitMulSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ]

3. 多签交易结构体

 /**
     *@dev 交易结构体
     * 根据TxType的不同,交易结构体的字段不同
     * 1.法币提现交易, blank字段为银行卡号,amount为提现金额,to 暂时没用,from为发起地址
     * 2.数字货币提现交易, blank字段是提取代币名称例如"MATIC","USDT",amount为提现金额,to 提取账户地址,from为发起地址 blank字段为银行卡号
     * 3.添加签名人交易, blank字段没用,amount为0,to 新增的签名人地址,from为发起地址 
     * 4. 删除签名人交易, blank字段没用,amount为0,to 被删除的签名人地址,from为发起地址
     * 5. 限额交易, blank字段没用,amount为限额,to 暂时没用,from为发起地址
     * 6. 业务配置交易变更, blank字段没用,amount为业务配置的value,to 暂时没用,from为发起地址: value的编码,为 按位进行 如果是两项就表示,每一位代表一个业务 10/00/11/01  1表示开启 0表示关闭
      * 另外 业务配置 目前 有两个配置项 1.法币提现 2.加密提现
     */
    struct Mtx{
      string  blank;
      uint txId;
      uint amount;
      uint when;
      address to;
      address from;
      uint index;
      TxType txType;
      uint txHash;
   }


4 。多签业务类型

    enum TxType{
        FiatWithDraw,  //法币提取 0
        CryptoWithDraw, // 加密货币提取 1
        AddSigner, //增加签名人 2
        RemoveSigner, //移除签名人3 
        LimitQuota, //配额 4
        BizConfigChange //业务配置变更 5
    }

5.  签名 操作值

 0 同意 1拒绝