Mina 文档 - 高级篇 之 数据查询

  • MinaFans
  • 更新于 2021-12-14 16:38
  • 阅读 2170

Mina 开发者文档

4.5 节点操作者的数据查询

一些节点操作人员不希望参与生产区块或创建snark工作,而只是接入网络,被动地聚合信息,以查询或提交签名交易。并且这些节点本身不需要帐户密钥对便能成功运行。

准备

除了在您的机器上安装Mina守护进程之外,您可能还希望在您的机器上设置一些系统来存档历史信息。为此,您可以通过其他冗余方式来设置存档节点和/或存档

运行一个节点

学习如何运行节点的最好方法是按照文档连接页面上的说明进行操作。

然而,您应该删除CODA_PRIVKEY_PASS和-block-producer-key ...参数,因为我们不希望这个节点以区块生产者的身份启动。

为了公开区块链的最新信息,我们需要公开GraphQL REST服务器。如果默认值0xc0d或3085不适合您,您可能需要提供-rest-server-port XXXX您可能还想提供-insecure-rest-server以使得REST服务器可以从本地主机外部访问localhost。但是,如果您这样做了,请确保正确设置了防火墙。参见GraphQL API页面了解更多信息。

查询信息

这里给出了查询链上最近的信息示例——在实践中呈现的是最近10小时内的剩余测试网和第一版主网的活动。由于Mina是一个简洁的区块链,历史信息可以通过某种存档过程访问

探索每个GraphQL对象可用的所有特定细节的最佳方法是通过web浏览器,该浏览器指向从托管GraphQL沙盒的Mina守护进程中运行的REST服务器。请访问GraphQL API页面了解更多信息。文档也会显示在大多数单独的字段上,您可以通过将鼠标悬停在沙盒中的条目上或访问托管的模式来了解每个字段的更多信息。

数据块

query BlockData {
 bestChain(maxLength: 10) {
  stateHash
  creatorAccount {
   balance {
    total
   }
  }
 }
}

我们很快就会添加对block查询的支持,该查询可以在bestChain中或是我们节点本地的任意分叉中请求特定的区块。更多信息请参见#7404

当前余额

下面的查询用于访问公钥对应账户的当前余额。注意,您还可以请求检查该余额的区块的blockHeight和stateHash。

query CurrentBalance {
 account(publicKey: "B62qmyjqEtUEZrsBpUaiz18DCkwh1ovCrJboiHbDhpvH8JEoaag5fUP") {
  balance {
   blockHeight
   total
   stateHash
  }
 }
}

质押信息

在Mina中,账户余额只能完全被质押或委托。没有中间状态。下面是一种查询当前分类帐中存在的信息的方法。

query StakingInfo {
 account(publicKey: "B62qmyjqEtUEZrsBpUaiz18DCkwh1ovCrJboiHbDhpvH8JEoaag5fUP") {
  balance {
   blockHeight
   total
   stateHash
  }
  delegateAccount {
   publicKey
  }
 }
}

如果delegateAccount.publicKey为空,则该帐户是“直接质押”,该私钥应直接用于区块生产。

请注意,当前“epoch”中的实际质押和委托是从“质押账本”中提取的。我们目前正在实现一种直接访问该质押账本的机制,但目前您需要定期查询该信息,并将其存储在内部,然后在它变得活跃时引用它。在epoch转换时,一个新的质押账本是借助两个epoch前的最后一个区块时的账本选择的。在实践中,这是在2-4周之间。

得到交易细节

通过GraphQL,您可以在bestChain的区块内查找交易,如下所示:

query TransactionDetails {
 bestChain(maxLength: 10) {
  stateHash
  creatorAccount {
   balance {
    total
   }
  }
  transactions {
   coinbase
   userCommands {
    amount
    fee
    feePayer {
     publicKey
    }
    hash
    isDelegation
    kind
    memo
    nonce
    receiver {
     publicKey
    }
    source {
     publicKey
    }
   }
  }
 }
}

提交已签署的交易

您可以使用以下GraphQL变体发送签名交易。您可以获得关于返回给您的支付的信息,作为一个合法性检查。

mutation SubmitSignedTransaction {
 __typename
 sendPayment(input: {
  fee: "3000000",
  amount: "42",
  to: "B62qrcFstkpqXww1EkSGrqMCwCNho86kuqBd4FrAAUsPxNKdiPzAUsy",
  from: "B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg",
  nonce: "0",
  memo: "This is a memo",
  validUntil: "50000"
 }, signature: {
   field: "26393275544831950408026742662950427846842308902199169146789849923161392179806",
   scalar: "28530962508461835801829592060779431956054746814505059654319465133050504973404"
  }) {
  payment {
   amount
   fee
   kind
   memo
   nonce
   source {
    publicKey
   }
   receiver {
    publicKey
   }
   isDelegation
  }
 }
}
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
MinaFans
MinaFans
minafans.tech