EVM-JRPC调用Vision原生功能

❗️

注意事项

1、功能生效版本:ultima1.2.0 预计2022H2
2、合约代码内部调用0x8888888888888888888888888888888888888888不会生效。
3、原生接口调用0x8888888888888888888888888888888888888888不会生效。

介绍

Metamask是以太坊钱包,使用广泛。为了方便用户使用Vision,Vision除了兼容了部分metamask的主要接口外,还兼容了vision的原生功能:
带签名的事务性交易:冻结(光量子/熵/节点质押/社区节点投票),解冻(光量子/熵/节点质押/社区节点投票),提取收益,节点申请,节点信息修改,节点佣金比例修改,proposal创建,proposal审核,proposal删除,账户信息修改
查询类交易:查询收益,查询节点佣金比例,查询维护周期

接口

vision原生交易兼容evm的JRPC接口注意是这两个方法:
eth_sendRawTransaction(为签名交易创建一个新的消息调用交易或合约)
eth_call(立刻执行一个新的消息调用,无需在区块链上创建交易)

其中eth_sendRawTransaction为带签名的事务性交易,eth_call为不带签名的无需上链的查询类交易。

节点连接信息参照:部分兼容以太坊Jrpc API

兼容说明

将底层交易类型按照合约方法及参数方式规范,设定固定合约地址,方法及参数生成abi,调用方式参照合约调用方式,合约地址为固定地址,data为传入的交易方法名及参数

合约地址为:0x8888888888888888888888888888888888888888
合约ABI:

[ { "stateMutability": "payable", "type": "fallback" }, { "inputs": [ { "internalType": "string", "name": "account_name", "type": "string" } ], "name": "accountUpdate", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "uint256", "name": "upgrade_fee", "type": "uint256" } ], "name": "createWitness", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "frozen_balance", "type": "uint256" }, { "internalType": "uint256", "name": "frozen_duration", "type": "uint256" }, { "internalType": "uint256", "name": "resource", "type": "uint256" }, { "internalType": "address", "name": "receiver_address", "type": "address" }, { "internalType": "uint256[]", "name": "stages", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "frozen_balances", "type": "uint256[]" } ], "name": "freezeBalance", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "frozen_balance", "type": "uint256" }, { "internalType": "uint256", "name": "frozen_duration", "type": "uint256" }, { "internalType": "uint256", "name": "resource", "type": "uint256" }, { "internalType": "address", "name": "receiver_address", "type": "address" }, { "internalType": "uint256[]", "name": "stages", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "frozen_balances", "type": "uint256[]" }, { "internalType": "bool[]", "name": "refreezes", "type": "bool[]" } ], "name": "freezeBalance", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "frozen_balance", "type": "uint256" }, { "internalType": "uint256", "name": "frozen_duration", "type": "uint256" }, { "internalType": "uint256", "name": "resource", "type": "uint256" }, { "internalType": "address", "name": "receiver_address", "type": "address" } ], "name": "freezeBalance", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_address", "type": "address" } ], "name": "getBrokerage", "outputs": [ { "internalType": "uint256", "name": "brokerage", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getNextMaintenanceTime", "outputs": [ { "internalType": "uint256", "name": "num", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_address", "type": "address" } ], "name": "getReward", "outputs": [ { "internalType": "uint256", "name": "reward", "type": "uint256" }, { "internalType": "uint256", "name": "spreadReward", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" }, { "internalType": "bool", "name": "is_add_approval", "type": "bool" } ], "name": "proposalApprove", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" }, { "internalType": "string", "name": "proposal_value", "type": "string" } ], "name": "proposalCreate", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" }, { "internalType": "uint256", "name": "proposal_value", "type": "uint256" } ], "name": "proposalCreateUint", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" } ], "name": "proposalDelete", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "resource", "type": "uint256" }, { "internalType": "address", "name": "receiver_address", "type": "address" } ], "name": "unfreezeBalance", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "resource", "type": "uint256" }, { "internalType": "address", "name": "receiver_address", "type": "address" }, { "internalType": "uint256[]", "name": "stages", "type": "uint256[]" } ], "name": "unfreezeBalance", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "brokerage", "type": "uint256" } ], "name": "updateBrokerage", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "update_url", "type": "string" } ], "name": "updateWitness", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "vote_address", "type": "address[]" }, { "internalType": "uint256[]", "name": "vote_count", "type": "uint256[]" } ], "name": "voteWitness", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "withdraw_type", "type": "uint256" } ], "name": "withdrawBalance", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]

对应底层接口参照开发者中心API

事务类接口

冻结资源

  • 普通冻结:freezeBalance(uint256 frozen_balance, uint256 frozen_duration, uint256 resource, address receiver_address)
    参数:
    frozen_balance:冻结金额,单位vdt
    frozen_duration:冻结时间,
    resource:光量子,熵,节点质押,社区节点投票
    receiver_address: 接收地址,为自己冻结,则是自己的地址,为他人冻结,填他人地址,社区节点投票,填投票地址

  • 多档冻结:freezeBalance(uint256 frozen_balance, uint256 frozen_duration, uint256 resource, address receiver_address, uint256[] memory stages, uint256[] memory frozen_balances, bool[] memory refreezes)
    参数:
    frozen_balance:冻结金额,单位vdt
    frozen_duration:冻结时间
    resource:光量子,熵
    receiver_address: 接收地址,为自己冻结,则是自己的地址,为他人冻结,填他人地址
    stages:冻结档位
    frozen_balances:冻结档位对应的冻结量,单位vdt
    refreezes: 档位对应是否复投,默认false,只允许单个档位复投,不允许批量复投

解冻资源

  • 普通解冻:unfreezeBalance(uint256 resource, address receiver_address)
    参数:
    resource:光量子,熵,节点质押,社区节点投票
    receiver_address: 解冻地址,为自己解冻,则是自己的地址,解冻为他人冻结的资源,填他人地址,社区节点解冻,填投票地址

  • 多档解冻:unfreezeBalance(uint256 resource, address receiver_address, uint256[] memory stages)
    参数:
    resource:光量子,熵,节点质押,社区节点投票
    receiver_address: 解冻地址,为自己解冻,则是自己的地址,解冻为他人冻结的资源,填他人地址,社区节点解除投票,填投票地址
    stages:解冻档位

投票

  • voteWitness(address[] memory vote_address, uint256[] memory vote_count)
    参数:
    vote_address:投票地址数组
    vote_count: 投票数量数组,与投票地址一一对应

提取奖励

  • withdrawBalance(uint256 withdraw_type)
    参数:
    withdraw_type:提取收益类型,0 - 全部提取,1 - 提取社区节点投票奖励

节点申请

  • createWitness(string memory url, uint256 upgrade_fee)
    参数:
    url:申请节点需要配置的url
    upgrade_fee: 升级成为节点需要消耗的vs数量

节点修改

  • updateWitness(string memory update_url)
    参数:
    update_url:修改节点的url

节点佣金比例修改

  • updateBrokerage(uint256 brokerage)
    参数:
    brokerage:设置给节点的瓜分比例,如20,则节点瓜分20%,选民瓜分80%

发起提议

  • 发起普通提议:proposalCreateUint(uint256 proposal_id, uint256 proposal_value)
  • 发起字符串提议:proposalCreate(uint256 proposal_id, string memory proposal_value)
    参数:
    proposal_id:对应提议的id
    proposal_value:对应提议要修改的值

提议审核

  • proposalApprove(uint256 proposal_id, bool is_add_approval)
    参数:
    proposal_id:对应提议的id
    is_add_approval:审核的结果,true - 同意,false - 不同意

提议删除

  • proposalDelete(uint256 proposal_id)
    参数:
    proposal_id:对应提议的id

修改账户名

  • accountUpdate(string memory account_name)
    参数:
    account_name:账户名

查询类接口

查询奖励

  • getReward(address owner_address) public returns(uint256 reward, uint256 spreadReward)
    参数:
    owner_address:指定地址
    返回值:
    reward:总的奖励,包含社区节点投票奖励
    spreadReward:社区节点投票奖励

查询节点佣金比例

  • getBrokerage(address owner_address) public returns(uint256 brokerage)
    参数:
    owner_address:指定节点的地址
    返回值:
    brokerage:节点的瓜分比例

查询下个维护周期的时间

  • getNextMaintenanceTime() public returns (uint256 num)
    返回值:
    num:下个维护周期的时间戳,精确到毫秒

Did this page help you?