FISCO BCOSに基づくブロックチェーンプロジェクトの構築及びシステムテストソリューションの実践小結

4314 ワード

以下では、開発(完全なテストを含む)の観点から、各ステップのキーを整理します.
ブロックチェーンの構築
このステップは詳しくは言いませんが、現在のオープンソースドキュメントに基づいて、完全に対応して構成化すればいいので、直接最後まで引っ張って、具体的にはドキュメントを参照してください.
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/getstart/index.html
対応するノードが立ち上がった後、ps-ef|grep fiscoで対応するディレクトリのノードが正常に起動しているかどうかを検証します.
契約の作成と導入
まず、契約のbalance値を更新し、対応するアドレスを返すDemoという簡単な契約を書きます.
pragma solidity ^0.4.4;contract Demo{    uint balance;    function update(uint amount) returns (address, uint){        balance += amount;        return (msg.sender, balance);    }}
次に、品目パッケージのガイドラインを使用して、この契約をcontractディレクトリの下に配置し、配置契約コマンドを実行して契約をブロックチェーンに配置します.
[app@VM_100_48_centos tool]$ babel-node deploy.js DemoRPC=http://0.0.0.0:21334Ouputpath=./output/deploy.js  ........................Start........................Soc File :DemoDemocomplie success!send transaction success: 0xb3f4275c9ef27ca927d279c33a9991061693504849da14841f5cfbc2f81d259eDemocontract address 0xaed8b4409cd8635bc5dd1315b871e8749e228943Demo deploy success!cns add operation => cns_name = Demo         cns_name =>Demo         contract =>Demo         version  =>         address  =>0xaed8b4409cd8635bc5dd1315b871e8749e228943         abi      =>[{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"update","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"type":"function"}]
出力が上記のフォーマットであることは、配置に成功したことを示しており、赤い部分が記録されており、契約アドレスであり、その後の私たちのプロジェクトでは、このアドレスを呼び出すことで対応する契約を実行する必要があります.
契約生成に対応するJavaコード
対応するdist/binディレクトリの下に、対応するcompileが表示されます.shファイルは、Javaコードにコンパイルするためのもので、具体的な実行操作はsh compile.sh{package}は、例えば生成された契約オブジェクトが私のプロジェクトに配置する必要があるpackageパスがcnである.webank.blockchainは、対応するディレクトリで実行する:sh compile.sh cn.webank.blockchain、同級ディレクトリのoutputフォルダの下にすべてのcontractディレクトリの契約ファイルが対応するJavaコードを生成しているのが見えます.その中に私たちのDemoがあります.JAvaファイル.対応する項目にコピーすればよい
プロジェクトを介して契約を直接呼び出す方法
以前のブロックチェーンノードが起動した後、Web 3 sdkディレクトリからいくつかのファイルを見つけることができます.主に、プロジェクトに移動します.
applicationContext.xml  
ca.crt
client.keystore
最初にSpringContextファイルを尋ね、次の2つが証明書です.なぜなら、品目パッケージはSpring 2を参照しているからです.5の書き方は、あまりにも古いので、Contextファイルから必要なデータを抽出することができます.Springbootプロジェクトであれば、対応するBeanファイルを@Configurationファイルに直接注入すればいいです.
テストファイルの場合、統合はTestファイルに格納され、最終的な結果は以下の通りです.
@Slf4j
DemoTest {

    Demo demo@Before
    setUp() Exception {

        String contractAddress = Web3j web3j = Web3j.build(getChannelEthereumService())Credentials credentials = GenCredential.create()BigInteger gasPrice = BigInteger()BigInteger gasLimited = BigInteger()demo = Demo.load(contractAddressweb3jcredentialsgasPricegasLimited)log.info()}

    Web3jService getChannelEthereumService() Exception {
        ChannelEthereumService channelEthereumService = ChannelEthereumService()channelEthereumService.setChannelService(getChannelService())channelEthereumService.setTimeout()channelEthereumService}

    Service getChannelService() Exception {
        Service service = Service()service.setOrgID()service.setConnectSeconds()service.setConnectSleepPerMillis()ConcurrentHashMap keyID2connections = ConcurrentHashMap<>()ChannelConnections channelConnections = ChannelConnections()channelConnections.setCaCertPath()channelConnections.setClientKeystorePath()channelConnections.setKeystorePassWord()channelConnections.setClientCertPassWord()List list = ArrayList<>()list.add()list.add()channelConnections.setConnectionsStr(list)keyID2connections.put(channelConnections)service.setAllChannelConnections(keyID2connections)service.run()service}

    @Test
    testUpdateBalance() ExecutionExceptionInterruptedException {

        Uint256 balance = Uint256()TransactionReceipt receipt = demo.update(balance).get()Assert.assertNotNull(receipt)}
}

先行システムテストに合格する方法
お客様とブロックチェーンノードを分離し、上チェーンコストを削減するために、前置プロジェクトを通じて具体的なブロックチェーンの詳細を隠すことがあります.前置システムのテスト案は以下の通りです.
通常のインタフェーステスト/シーンテストと変わりません.自動化テストを行うには、別の自動化テストのシナリオを参照して、少し注釈パラメータを追加することを開発します.
https://blog.51cto.com/14054453/2314500
転載先:https://blog.51cto.com/14054453/2314503