自定义ETH结算器实施期间的问题

vla*_*ich 5 kotlin blockchain corda

我已经调查并参与了corda-settler项目。按照文档中的建议,我创建了一个自定义ethereum模块(其轮廓与该ripple模块相似),提供了使用中的未分类付款来清算债务的选项ETH。实现(https://github.com/vladichhh/corda-settler)包含以下重要部分:

flows
    MakeEthPayment
services
    ETHClient
    ETHService
types
    EthPayment
    EthSettlement
token
    registered DigitalCurrency for ETH
oracle
    added logic for ETH payment verification
Run Code Online (Sandbox Code Playgroud)

MakeEthPayment.kt

@Suspendable
override fun makePayment(obligation: Obligation<*>, amount: Amount<T>): EthPayment<T> {

    // get ETHService client
    val ethClient = serviceHub.cordaService(ETHService::class.java).client

    val recipient = obligation.settlementMethod?.accountToPay.toString()
    val amountToSend = amount.quantity.toString()

    // trigger ETH transfer
    val txHash = ethClient.sendEth(recipient, amountToSend)

    // return the payment
    return EthPayment(txHash, amount, PaymentStatus.SENT)
}
Run Code Online (Sandbox Code Playgroud)

ETHClient.kt

fun sendEth(recipient: String, amount: String): String {
    val weiAmount: BigInteger = Convert.toWei(amount, Convert.Unit.GWEI).toBigInteger()

    val credentials: Credentials = WalletUtils.loadCredentials(walletPassword, walletFile)

    val transactionReceipt: TransactionReceipt = Transfer
            .sendFunds(web3j, credentials, recipient, BigDecimal(weiAmount), Convert.Unit.WEI)
            .send()

    return transactionReceipt.transactionHash
}
Run Code Online (Sandbox Code Playgroud)

为了将所需的ETH金额发送到指定的接收者账户,我们必须做一些以太坊特定的事情:

  • 我们使用“ web3j”库连接到以太坊公共区块链环境
  • 为了触发以太坊交易并转移指定的ETH数量,“ web3j”需要访问文件,其中包含加密的发件人的钱包
  • 因此,我们必须提供密码(解密钱包)和文件的位置,其中包含加密的发件人的钱包

这里是问题:

  • 我有一个例外,无论我放在哪里,都找不到该文件。我什至检查了“ swift”实现,并尝试使用类加载器加载我的文件,但没有成功。
  • 我想,带有加密发件人钱包的文件应该位于以下位置之一:
corda-settler/ethereum/src/main/resources/file.tmp
corda-settler/cordapp/src/main/resources/file.tmp
Run Code Online (Sandbox Code Playgroud)
  • 最终,我以这种方式对位置进行了硬编码:
/Users/vladimirhristov/WebstormProjects/Corda/corda-settler/cordapp/src/main/resources/file.tmp
Run Code Online (Sandbox Code Playgroud)

似乎已找到该文件,但又出现另一个异常:

java.lang.OutOfMemoryError-屏幕截图

似乎钱包解密操作非常耗时,可能会中断流程。有一个选项可以降低钱包生成的算法复杂度,这将反映出在下一步解密同一钱包所需的资源较少,但这也会降低安全性。

这是我的三个基本问题...

  1. 如何指定(位置/机制)并使流程成功查找包含发件人加密钱包的文件?
  2. 我如何才能访问流中的文件,或者是否存在另一种机制来仅附加具有加密钱包的文件并将解密传递给核心Corda?
  3. 为了避免OutOfMemoryError,是否仅需要增加节点资源(将JVM参数调整为-Xms / -Xmx)?

文件内容(包含加密的发件人的钱包):

file.tmp

{"version":3,"id":"ecb51768-8564-498a-bb11-3a5a5c8dc0bb","address":"2bafc482bd227dfd5ba250521a00be3a4cc88bbd","crypto":{"ciphertext":"e0511415792dfa7221ba1b8f32b8ec98e1410f45e612e2100df1aceddfdb22bd","cipherparams":{"iv":"7ffa2af08f502c63d57e62440ad77539"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"8051a5df1c02eb3eba81d2920fbb84b76b948a1248bbba62ffff684e733948cf","n":131072,"r":8,"p":1},"mac":"be23fe0e261ba38892581d80afd0c86563748377b5cc702b6ed3285a13cceff6"}}
Run Code Online (Sandbox Code Playgroud)

我将不胜感激!提前致谢 :)

dav*_*wad 0

非常奇怪的是,Corda 在运行该流程时给出内存不足错误。

实际上我想说的是,我们需要能够查看流程的代码,才能知道它是如何耗尽内存的。

你在容器中运行它吗?只需确保您满足运行带有应用程序的 JVM 的要求即可。

tl;dr 使用 8GB RAM 机器在最新版本的 corda 上运行 Corda 节点,有望解决此问题。

这是有关内存要求的文档页面; https://docs.corda.net/docs/corda-enterprise/4.5/node/performance-results.html#sizing