json-rpc - 如何在 Substrate 上构建 pow 共识中包含 json-rpc?

标签 json-rpc pow consensus substrate

在substrate的pow共识模块中,矿工通过RPC访问的方式不挖矿石,如何访问?

我不知道。

fn mine(
        &self,
        parent: &BlockId<B>,
        pre_hash: &H256,
        difficulty: Difficulty,
        round: u32,
    ) -> Result<Option<RawSeal>, String> {
        let mut rng = SmallRng::from_rng(&mut thread_rng())
            .map_err(|e| format!("Initialize RNG failed for mining: {:?}", e))?;
        let key_hash = key_hash(self.client.as_ref(), parent)?;

        for _ in 0..round {
            let nonce = H256::random_using(&mut rng);

            let compute = Compute {
                key_hash,
                difficulty,
                pre_hash: *pre_hash,
                nonce,
            };

            let seal = compute.compute();

            if is_valid_hash(&seal.work, difficulty) {
                return Ok(Some(seal.encode()))
            }
        }
        Ok(None)
    }

最佳答案

我建议您遵循类似于 Kulupu 的模式用于创建 PoW Substrate 区 block 链。

在 Kulupu 中,如果 Substrate 服务检测到您是“权威”,它似乎就会开始挖掘:

/// Builds a new service for a full client.
pub fn new_full<C: Send + Default + 'static>(config: Configuration<C, GenesisConfig>, author: Option<&str>, threads: usize, round: u32)
    -> Result<impl AbstractService, ServiceError>
{
    let is_authority = config.roles.is_authority();

    let (builder, inherent_data_providers) = new_full_start!(config, author);

    let service = builder
        .with_network_protocol(|_| Ok(NodeProtocol::new()))?
        .with_finality_proof_provider(|_client, _backend| {
            Ok(Arc::new(()) as _)
        })?
        .build()?;

    if is_authority {
        for _ in 0..threads {
            let proposer = basic_authorship::ProposerFactory {
                client: service.client(),
                transaction_pool: service.transaction_pool(),
            };

            consensus_pow::start_mine(
                Box::new(service.client().clone()),
                service.client(),
                kulupu_pow::RandomXAlgorithm::new(service.client()),
                proposer,
                None,
                round,
                service.network(),
                std::time::Duration::new(2, 0),
                service.select_chain().map(|v| v.clone()),
                inherent_data_providers.clone(),
            );
        }
    }

    Ok(service)
}

在这种情况下,您只需使用 --validator 标志和带有地址的 --author 标志启动节点:

cargo run --release -- --validator --author 0x7e946b7dd192307b4538d664ead95474062ac3738e04b5f3084998b76bc5122d

关于json-rpc - 如何在 Substrate 上构建 pow 共识中包含 json-rpc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815684/

相关文章:

c++ - C++中json-rpc的速度

android - 来自字符串 ("2 power 3"的数学函数幂)

c++ - C++ 中的幂函数和数组

具有负 vector 大小计算的 C++ pow 行为

Cassandra的轻量级交易& Paxos共识算法

algorithm - 分布式系统中用于共识的更快的 Paxos 相关算法有哪些?

hyperledger-fabric - Hyperledger Fabric 共识

grails - JSONRPC 与 Grails

http - 去 - JSON-RPC - "too many colons"

java - 监听从 PHP Web 服务访问的 MySQL 数据库中的更改