Ethereumj

使用 ethereumj 評估鏈下合約

  • November 7, 2017

是否可以從主要的乙太坊區塊鏈中獲取契約並在我的私有乙太坊網路上使用 ethereumj?

我想要做的是,在不改變區塊鍊和消耗氣體的情況下執行帶有一些輸入的合約。

有什麼線索嗎?

Ethereumj 提供了一個名為*StandAloneBlockchain.java*的類。你可以在這裡看到它的使用。

StandaloneBlockchain sb = new StandaloneBlockchain().withAutoblock(true);
SolidityContract a = sb.submitNewContract(
               "contract A {" +
                   "  uint public a;" +
                   "  uint public b;" +
                   "  function A(uint a_, uint b_) {a = a_; b = b_; }" +
                      "}",
                   "A", 555, 777
);

有了這個,您將能夠測試預期的結果,而無需實際使用任何真正的 ETH/gas。因此,您將了解真實交易在網路上的行為方式。

您可以通過在交易執行前後檢查餘額來做到這一點。下面的程式碼斷言已發送金額;但是,您可以對賬戶餘額進行更詳細的檢查,以了解交易成本。

BigInteger aliceInitBal = sb.getBlockchain().getRepository().getBalance(alice.getAddress());
BigInteger bobInitBal = sb.getBlockchain().getRepository().getBalance(bob.getAddress());
assert convert(123, ETHER).equals(bobInitBal);

sb.setSender(bob);
sb.sendEther(alice.getAddress(), BigInteger.ONE);

sb.createBlock();

assert convert(123, ETHER).compareTo(sb.getBlockchain().getRepository().getBalance(bob.getAddress())) > 0;
assert aliceInitBal.add(BigInteger.ONE).equals(sb.getBlockchain().getRepository().getBalance(alice.getAddress()));

StandAloneBlockchain.java類對於對 Solidity 合約進行單元測試也很有用。

如果您需要任何澄清,請發表評論。

引用自:https://ethereum.stackexchange.com/questions/30015