介绍
Market Maker Proxy 是做市商的链上代币储备库,是一个使用 Solidity 编写的以太坊智能合约(简称 MMProxy)。加入 Tokenlon 生态后,做市商需要将做市代币存入 MMProxy 合约。做市商具有 MMP 合约的所有权,代币充值、提现和授权都由做市商自行控制。
接口
权限
合约里有两种权限,分别是 owner 和 operator。
owner 具备合约权限接口的操作权限,operator 具备合约功能接口的操作权限。
transferOwnership
移交 owner 权限。
owner 是合约的最高权限,具备合约的完全管理能力。
API
transferOwnership(address newOwner)
参数
- newOwner: 需要设置的新 Owner 地址
注意
- 只有 Owner 具备该接口操作权限
- 谨慎使用,转让到错误的地址可能导致合约资产无法提现!
setOperator
设置 operator。
operator 具备合约功能的操作权限,只有 owner 能指定 operator,operator 可以对合约进行提现和授权等功能。
API
setOperator(address newOperator)
参数
- newOperator: 需要设置的新 Operator 地址
注意
- 只有 Owner 具备该接口操作权限
功能
setSigner
设置 signer。
signer 是 MMSK 中的订单签名钱包地址,做市商在接入 Tokenlon 时,需要将 MMSK 的钱包地址设置到 MMProxy 合约中。
API
setSigner(address signer)
参数
- signer: 需要设置的新 signer 地址
注意
- 只有 Operator 具备该接口操作权限
- signer 钱包具备从 MMProxy 合约中转移代币的能力
setAllowance
将合约的指定代币转移权限授权给 spender。
做市商必须将支持的代币授权给 0x ERC20Proxy 合约(0x 部署地址)。
此时,0x ERC20Proxy 就是 spender。
0x ERC20Proxy mainnet 地址: 0x95e6f48254609a6ee006f7d493c8e5fb97094cef
0x ERC20Proxy kovan 地址: 0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e
注意:请以0x 部署地址为准
API
setAllowance(address[] memory token_addrs, address spender)
参数
- token_addrs: 需要进行授权的代币地址列表
- spender: 授权到指定 spender 地址
注意
- 只有 Operator 具备该接口操作权限
closeAllowance
关闭合约的指定代币转移权限。
做市商不再支持的代币,可自行关闭授权。
API
closeAllowance(address[] memory token_addrs, address spender)
参数
- token_addrs: 需要关闭授权的代币地址列表
- spender: 关闭指定 spender 地址的授权
注意
- 只有 Operator 具备该接口操作权限
withdraw
提现合约中指定代币。
API
withdraw(address token, address to, uint256 amount)
参数
- token: 需要提现的代币地址
- to: 提现到指定地址
- amount: 提现额度
注意
- 只有 Operator 具备该接口操作权限
- 提现前已经对该代币进行 setAllowance
- 提现额度(amount)为 bigInt,不包含 decimals
dapp
注意:dapp 处于 Beta 阶段。使用需自行承担风险。
为了方便做市商使用 MMProxy 合约,我们提供相应的 dapp 工具操作合约。
项目链接: github(NOT READY)
dapp 链接:https://consenlabs.github.io/contract-admin/mmp.html?addr={mmProxyContractAddress}
{mmProxyContractAddress}
为做市商代理合约地址。
冷(离线)钱包设置:imToken 2.0 如何设置观察钱包(冷钱包)?
安全性
为保证合约操作安全,建议使用 3 个独立的钱包管理合约:
- owner 钱包,MMProxy 的 owner 权限,用于设置合约的 operator 权限
- operator 钱包,用于 MMProxy 的功能设置和提现
- signer 钱包,用于 MMSK 中对订单进行签名
钱包要求
- owner 钱包:为保证安全性,使用冷(离线)钱包或硬件钱包
- operator 钱包:热钱包,一次性操作,使用后废弃
- signer 钱包:热钱包,只进行签名操作,无需存储代币。signer 钱包需要保证 MMSK 运行环境的安全性,避免 keystore/私钥泄露
操作流程
- 准备一个新的 operator 钱包,存储一定的 ETH 用于操作合约
- 使用 owner 钱包设置 operator
- 使用 operator 钱包对合约进行配置或提现
- 使用 owner 钱包设置 operator 为 0x0000..(空地址)