首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能让智能合约不可信地实时知道RSK密码的地址?

有没有可能让智能合约不可信地实时知道RSK密码的地址?
EN

Stack Overflow用户
提问于 2021-08-13 17:37:07
回答 2查看 112关注 0票数 6

有没有办法在RSK上使用智能合约来查询所有当前pegnatories的地址?要做到这一点而不依赖于RSK上的第三方先知?

背景:这里的目的是让智能合约将从费用中产生的收入的一部分分配给generated,以促进RSK链的可持续性和安全性。

请注意,这是一个后续问题to this prior one about the RSK Bridge

EN

回答 2

Stack Overflow用户

发布于 2021-08-13 17:50:54

使用web3.js,您应该能够执行以下操作:

代码语言:javascript
复制
let fedSize = await bridge.methods
    .getFederationSize().call();
let pks = [];
for (let i = 0; i < fedSize; i++) {
    let pk = await bridge.methods
        .getFederatorPublicKeyOfType(i, 'rsk').call();
    pks.push(pk);
}
let addresses = pks.map((pk) => (keccak256(pk).substr(12)));

要初始化bridge对象,您需要使用ABI for RSK Bridge预编译,如this earlier answer中所述。

票数 5
EN

Stack Overflow用户

发布于 2021-08-18 09:21:46

代码语言:javascript
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

import "./Bridge.sol";

contract Federation {
    function getBridge() private pure returns (Bridge) {
        return Bridge(address(0x01000006));
    }
    function getFederationSize() private view returns ( int256 ) {
        return getBridge().getFederationSize();
    }
    function getFederatorPublicKeyOfType ( int256 index, string memory atype ) private view returns ( bytes memory ) {
        return getBridge().getFederatorPublicKeyOfType(index, atype);
    }
    function getFederatorKeys() public view returns( bytes[] memory ) {
        int256 fedSize = getFederationSize();
        bytes[] memory keys = new bytes[](uint(fedSize));
        for (int256 i = 0; i < fedSize; i += 1) {
            keys[uint(i)] = getFederatorPublicKeyOfType(i, 'rsk');
        }
        return keys;
    }
}

要在链上执行此操作(在智能合约中),您可以创建一个与the web3.js answer from @bguiz执行相同操作的可靠函数(上面代码中的getFederatorKeys()),该函数调用getFederationSize,然后在循环中调用getFederatorPublicKeyOfType

请注意,您将需要修改Bridge.sol接口,以便getFederatorPublicKeyOfType的签名具有view

代码语言:javascript
复制
-  function getFederatorPublicKeyOfType ( int256 index, string calldata atype ) external returns ( bytes memory);
+  function getFederatorPublicKeyOfType ( int256 index, string calldata atype ) external view returns ( bytes memory);

稍后可能会从web3.js中调用此函数,如下所示

代码语言:javascript
复制
const fedPubKeys = await federation.methods.getFederatorKeys().call()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68776326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档