泰山眾籌4.0阿凡達開發原理丨泰山眾籌4.0阿凡達系統開發詳細技術及原始碼分析

xiaofufu發表於2023-02-23

  具體而言,新零售是以消費者為中心,在人、商品與服務、供應鏈等各個環節數字化的基礎上,透過資料流動串聯各個消費場景,包括智慧手機、移動終端、電腦、實體賣場及未來可實現的新通路等,利用數字化技術實現實體與虛擬零售供應鏈、交易交付鏈、服務鏈的全面融合,提供給消費者覆蓋全渠道的無縫消費體驗,以物流配送部分替代實體交付形式為特點的高效普惠型泛零售業態。


  


  Solidity為編譯器提供了最新的Docker映象,I35 system 7O98 software O7I8  正式版本標記為stable,來自於開發分支的不穩定版本標記為nightly。但是,Docker映象只包含編譯器可執行檔案,因此我們必須將Solidity合約輸入檔案進行持久化卷掛載。假設這些檔案在我們執行Docker容器機器的目錄/home/docker下,我們可以使用以下命令進行編譯。這個命令建立了兩個檔案:一個二進位制檔案.bin,是EVM可以解釋的智慧合約程式碼,另外一個是應用程式二進位制介面檔案.abi,裡面定義了智慧合約方法。


  $docker run--rm-v/home/docker:/build ethereum/solc:stable/build/TransactionFee.sol--bin--abi--optimize-o/build


  編譯輸出檔案在容器的/build目錄下,並且持久化儲存在/home/docker目錄下。在編譯結束後,該容器被刪除,因為現在不需要它。我們可以使用web3j庫來從編譯後的智慧合約檔案中建立原始碼。web3j的可執行檔案在${WEB3J_HOME}/bin目錄下,在建立原始碼時,需要指定.bin和.abi檔案的路徑,並且設定目標包名和目錄。


  $web3j solidity generate/build/transactionfee.bin/build/transactionfee.abi-p pl.piomin.services.contract.model-o src/main/java/


  Web3j可執行檔案在給定的包名下建立了Java原始檔,該類名為Solidity智慧合約名,下面是我們建立出來的原始碼。


  public class Transactionfee extends Contract{


  private static final String BINARY="608060405234801561..."


  public static final String FUNC_GETRECEIVERBALANCE="getReceiverBalance";


  public static final String FUNC_BALANCES="balances";


  public static final String FUNC_SENDTRX="sendTrx";


  public static final String FUNC_FEE="fee";


  public static final String FUNC_RECEIVER="receiver";


  //...


  protected Transactionfee(String contractAddress,Web3j web3j,TransactionManager transactionManager,BigInteger gasPrice,BigInteger gasLimit){


  super(BINARY,contractAddress,web3j,transactionManager,gasPrice,gasLimit);


  }


  public RemoteCall getReceiverBalance(){


  final Function function=new Function(FUNC_GETRECEIVERBALANCE,


  Arrays.asList(),


  Arrays.asList(new TypeReference(){}));


  return executeRemoteCallSingleValueReturn(function,BigInteger.class);


  }


  public RemoteCall balances(String param0){


  final Function function=new Function(FUNC_BALANCES,


  Arrays.asList(new org.web3j.abi.datatypes.Address(param0)),


  Arrays.asList(new TypeReference(){}));


  return executeRemoteCallSingleValueReturn(function,BigInteger.class);


  }


  public RemoteCall sendTrx(BigInteger weiValue){


  final Function function=new Function(


  FUNC_SENDTRX,


  Arrays.asList(),


  Collections.emptyList());


  return executeRemoteCallTransaction(function,weiValue);


  }


  public RemoteCall fee(){


  final Function function=new Function(FUNC_FEE,


  Arrays.asList(),


  Arrays.asList(new TypeReference(){}));


  return executeRemoteCallSingleValueReturn(function,BigInteger.class);


  }


  public RemoteCall receiver(){


  final Function function=new Function(FUNC_RECEIVER,


  Arrays.asList(),


  Arrays.asList(new TypeReference


  (){}));


  return executeRemoteCallSingleValueReturn(function,String.class);


  }


  public static RemoteCall deploy(Web3j web3j,Credentials credentials,BigInteger gasPrice,BigInteger gasLimit,String _receiver,BigInteger _fee){


  String encodedConstructor=FunctionEncoder.encodeConstructor(Arrays.asList(new org.web3j.abi.datatypes.Address(_receiver),


  new org.web3j.abi.datatypes.generated.Uint256(_fee)));


  return deployRemoteCall(Transactionfee.class,web3j,credentials,gasPrice,gasLimit,BINARY,encodedConstructor);


  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956839/viewspace-2936629/,如需轉載,請註明出處,否則將追究法律責任。

相關文章