合約跟單帶單(火幣/幣安/OK/歐易OKEX)交易機器人系統開發(開發策略)丨原始碼詳情

xiaofufu發表於2023-04-13

  


  首先,使用者透過Web介面或者收集App將運算元據傳送到一個傳統的業務伺服器,該業務伺服器時傳統網際網路中心化的伺服器,但是與傳統系統不同的是,該系統沒有像傳統網際網路設計那樣將資料放入中心化的資料庫儲存,而是透過一個Web3.0介面,將資料傳送到以太坊區塊鏈公鏈上。


  關於區塊鏈專案技術開發唯:MrsFu123,代幣發行、dapp智慧合約開發、鏈遊開發、單雙幣質押、多鏈錢包開發、NFT盲盒遊戲、公鏈、鏈上游戲開發


  Uniswap博餅、交易所開發、量化合約開發、合約對沖、互助遊戲開發、Nft數字藏品開發、眾籌互助開發、元宇宙開發、swap開發、DAO智慧合約、


  夾子合約、鏈上合約開發、ido開發、商城開發等,開發過各種各樣的系統模式,更有多種模式、制度、案例、後臺等,成熟技術團隊,歡迎實體參考。


  該介面是一個JSON RPC協議,該協議由很多程式碼實現。目前的是執行在Web容器中的Web.js3模組。Solidity程式語言經過編譯之後,除了交易需要的合約初始化程式碼之外,還有ABI介面等描述檔案,Web3.js透過這些描述檔案,可以構建與以太坊智慧合約虛擬機器進行通訊的模組,透過JS程式碼將使用者的運算元據傳入以太坊公鏈上的合約地址,智慧合約虛擬機器會根據函式簽名和載入的函式引數,在虛擬機器內執行編譯成EVM Code的智慧合約。


  智慧合約的編寫


  初始化開發環境


  在初始化開發環境前,請確認你有以太坊錢包。由於下文存在匯出以太坊賬戶私鑰的敏感操作,所以這裡建議你重新建立一個用於程式碼開發的以太坊賬戶。


  以太坊提供了測試網路供開發者使用。


  在下文中,我主要使用MetaMask作為錢包,同時主要使用Goerli TestNet。當然,你的賬戶中需要一些測試用ETH,可以前往這個水龍頭獲取。


  由於此文編寫時Ropsten TestNet仍未廢棄,所以後文采用了此測試網路。


  簡單的來說就是使用以下命令初始化開發環境:


  forge init ERC20Test


  1


  其中,ERC20Test可以更改為你想命名的專案名字。


  接下來,我們需要安裝一些開發庫以更加方便地編寫程式碼邏輯,此處我們將引入solmate和Openzeppelin兩個開發庫。前者是經過最佳化的且簡單易讀的智慧合約開發庫,但就僅實現了部分ERC功能;後者未經過最佳化,但包含的內容較多。在此次開發過程中,我們主要使用solmate。


  solmate的專案地址在這裡;Openzeppelin專案地址在這裡


  我們可以使用forge工具非常簡單的匯入這兩個庫,使用的命令如下:


  forge install Rari-Capital/solmate Openzeppelin/openzeppelin-contracts


  智慧合約的編寫


  本節主要介紹Solidity智慧合約的編寫,本節內容面向具有一定程式設計經驗的開發者。如果你讀者對本節的內容仍無法理解,可以先行閱讀以下材料:


  solidity的官方檔案


  Solidity by Example


  Solidity極簡入門,或稱WTF Solidity


  我們首先進行下述重新命名:


  src/Contract.sol=>src/token.sol


  script/Contract.s.sol=>script/token.s.sol


  test/Contract.t.sol=>test/token.t.sol


  對於Foundry來說,.s.sol和.t.sol均為功能性程式碼的字尾,這兩個字尾名雖然使用Solidity作為開發語言但作用不同於智慧合約,主要起輔助作用


  //SPDX-License-Identifier:MIT


  pragma solidity^0.8.13;


  import"solmate/tokens/ERC20.sol";


  import"openzeppelin-contracts/contracts/access/Ownable.sol";


  error NoPayMintPrice();


  error WithdrawTransfer();


  error MaxSupply();


  contract SDUFECoin is ERC20,Ownable{


  uint256 public constant MINT_PRICE=0.00000001 ether;


  uint256 public constant MAX_SUPPLY=1_000_000;


  constructor(


  string memory _name,


  string memory _symbol,


  uint8 _decimals


  )ERC20(_name,_symbol,_decimals){}


  function mintTo(address recipient)public payable{


  if(msg.value<MINT_PRICE){


  revert NoPayMintPrice();


  }else{


  uint256 amount=msg.value/MINT_PRICE;


  uint256 nowAmount=totalSupply+amount;


  if(nowAmount<=MAX_SUPPLY){


  _mint(recipient,amount);


  }else{


  revert MaxSupply();


  }


  }


  }


  function withdrawPayments(address payable payee)external onlyOwner{


  uint256 balance=address(this).balance;


  (bool transferTx,)=payee.call{value:balance}("");


  if(!transferTx){


  revert WithdrawTransfer();


  }


  }


  }


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

相關文章