Проблемы при реализации пользовательского ETH поселенца - PullRequest
1 голос
/ 10 июля 2019

Я исследовал и играл с 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

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)
}

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
}

Чтобы отправить требуемую сумму ETH на указанную учетную запись получателя, мы должны выполнить некоторые специфические действия в Ethereum:

  • мы подключаемся к общедоступной цепочке блоков Ethereum.В среде, использующей библиотеку «web3j»
  • для запуска транзакции am Etherem и передачи указанной суммы ETH, «web3j» требует доступа к файлу, содержащему зашифрованный кошелек отправителя
  • , поэтому мы должныпредоставить пароль (для расшифровки кошелька) и местоположение файла, содержащего зашифрованный кошелек отправителя

И вот такие проблемы:

  • Я получил исключение, что файл не можетбыть найденным, независимо от того, куда я его помещаю. Я проверил даже «быструю» реализацию и попытался использовать загрузчик классов для загрузки моего файла, но безуспешно.
  • IПредположим, файл с зашифрованным кошельком отправителя должен находиться в одном из следующих мест:
corda-settler/ethereum/src/main/resources/file.tmp
corda-settler/cordapp/src/main/resources/file.tmp
  • Наконец, я жестко закодировал местоположение таким образом:
/Users/vladimirhristov/WebstormProjects/Corda/corda-settler/cordapp/src/main/resources/file.tmp

и кажется, что файл был найден, но получил еще одно исключение:

java.lang.OutOfMemoryError - снимок экрана

Кажется, что операция расшифровки кошелькаочень потребляет, что может нарушить поток.Существует возможность уменьшить сложность алгоритма генерации кошелька, что отразится на меньших ресурсах, необходимых для расшифровки того же кошелька на следующем шаге, но это также снизит безопасность.

И вот моитри основных вопроса ...

  1. Как я могу указать (местоположение / механизм) и создать поток для успешного поиска моего файла, содержащего зашифрованный кошелек отправителя?
  2. Как получить доступ кфайлы в потоке, или если есть другой механизм, чтобы прикрепить только файл с зашифрованным кошельком и передать расшифровку ядру Corda?
  3. Нужно ли просто увеличивать ресурсы узла (настройка параметров JVM увеличивается -Xms / -Xmx), чтобы избежать OutOfMemoryError?

Содержимое файла (содержащего зашифрованный кошелек отправителя):

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"}}

Буду признателен за любую помощь!Заранее спасибо:)

...