聊一聊區塊鏈技術的開發
本文轉載自微信公眾號「區塊鏈研究實驗室 」,作者鏈三豐。轉載本文請聯系區塊鏈研究實驗室公眾號。
概述
本文將向大家提供有關區塊鏈技術開發入門時應該了解的一切的簡要概述,在這里給大家展示的是學習區塊鏈應用程序開發的基礎知識,由區塊鏈提供支持的去中心化應用程序(Dapps)。
有許多不同的區塊鏈為我們的Dapp提供動力,而最大的就是我們所知的以太坊。
為了與以太坊生態系統進行交互,則需要一個以太坊錢包和一些以太坊。Metamask,是最受歡迎的以太坊錢包之一。
以太坊錢包分為三個部分:
- 以太坊賬戶-可以發送和接收以太坊的實體
- 公鑰-用戶可以將以太坊發送給的地址
- 私鑰—訪問您的以太坊
使用以太坊錢包與以太坊網絡中的Dapp進行交互,假設您想將以太坊交易為另一種加密貨幣,您可以通過去中心化交易所Uniswap進行交易來做到這一點。
Uniswap由以太坊區塊鏈提供支持,它基于智能合約所運行,而智能合約,它是區塊鏈上的程序。
智能合約包括三個主要部分:
- 用戶-使用智能合約的人。
- 代碼-使用智能合約時會發生什么。
- 存儲-智能合約將更改的對象。
Dapp是用許多智能合約編寫的,例如:Uniswap是由許多智能合約提供支持的Dapp。
Dapps在Web開發中可與后端或服務器端相媲美,客戶端將連接到以太坊虛擬機上的智能合約,而不是連接到集中式服務器。
那么,我們如何為Dapp創建智能合約?
引入Solidity
Solidity是一種用于EVM的高級編程語言,您可以在Solidity中編寫智能合約。
我們將探索智能合約的一些基本語法和一般結構,然后將為自己的令牌編寫一個簡單的合同。
如果您熟悉另一種編程語言,您會發現一些問題,
- 布爾值—正確或錯誤
- Uint —整數(數字確定X冪的大小)
- 地址-以太坊地址
- 字符串—文本
這是您將在Solidity中使用的基本數據結構,
- 數組-從零開始的項目列表(可以是固定數字或動態數字)
- 映射—存儲具有鍵值對的數據
- 結構-用于定義存儲變量的新方法
- 枚舉-創建自己的數據結構
設置可見性是智能合約開發的重要組成部分,這樣您的私人地址將不為公開,而這些關鍵字可以應用于變量和函數,
- 公開-任何人都可以調用此功能
- 私人-只有合同可以調用此功能
- 查看—此函數返回數據且不修改數據
- 純-函數將不會修改,甚至不會讀取合同的數據
- 應付賬款—功能可以接收以太坊
您將大量使用公共和私人的資源,擁有這些,我們就可以開始編寫一些代碼了。
制作MediumToken
首先,我們使用Pragma關鍵字聲明solidity的版本,然后將Solidity指定為編譯器以及什么版本。
讓我們來看一個例子:
- pragma solidity >=0.4.22 <0.6.0;
這是開發過程中的重要一步,編寫驚人的智能合約只是為了發現編譯器不能與您使用的Solidity版本配合使用。
我們將為Medium創建一個令牌,我們稱它為MediumToken。
接下來,我們需要實際聲明合同。
- pragma solidity >=0.4.22 <0.6.0;
- contract MediumToken {
- }
這里只需添加令牌的基本結構即可。
智能合約需要具有構造函數,當我們的代碼部署到區塊鏈時,該功能將運行一次。
- pragma solidity >=0.4.22 <0.6.0;
- contract MediumToken {
- constructor() public {
- address owner = msg.sender;
- }
- }
在這里,我們聲明的地址變量等于msg.sender,這是調用該函數的人員的地址。又是你
在構造函數中,我們需要做的另一件事是鑄造MediumTokens,設置電源。
- pragma solidity >=0.4.22 <0.6.0;
- contract MediumToken {
- constructor() public {
- address owner = msg.sender;
- balance[owner] = 420; }
- }
此時您鑄造了420個MediumToken,該數字是您想要的任何數字。構造函數運行后,我們需要創建所有余額的映射。
- pragma solidity >=0.4.22 <0.6.0;
- contract MediumToken {
- constructor() public {
- address owner = msg.sender;
- balance[owner] = 420; }
- mapping (address => uint256) public balances;
- }
這是一個公共映射,意味著任何人都可以看到它并與其進行交互。
接下來,我們需要編寫一個函數,該函數將允許用戶發送其MediumToken。
- pragma solidity >=0.4.22 <0.6.0;
- contract MediumToken {
- constructor() public {
- address owner = msg.sender;
- balance[owner] = 420; }
- mapping (address => uint256) public balances;
- function send(uint amount, address recipient) public {
- require(balances[msg.sender] >= amount);
- require(balances[msg.sender] -amount <= balances[msg.sender]); require(balances[recipient] + amount >= balances[recipient]);
- balances[msg.sender] -= amount; // Always subtract first balances[recipient] += amount; // Add amount to recipient
- }
- }
讓我們分解一下,我們的send函數將接受uint形式的金額,它還可以接受收件人的地址,而且此功能將是公開的,因此任何人都可以看到它。
此時我們要做的第一件事是創建一些require語句,這樣我們就可以檢查發送者的錢包中是否確實有令牌數量。
另外2項要求聲明是安全措施,第一個是確保發送方在發送令牌后的余額小于或等于;第二個是確保收款人的地址大于或等于交易前的地址。
- require(balances [msg.sender] -amount <= balances [msg.sender]);
如上述操作,我們創建了420個MediumToken,將它們分配給所有者,并創建了將其發送出去的功能!
如果您想再次查看它,這是完整的代碼。
- pragma solidity >=0.4.22 <0.6.0;
- contract MediumToken {
- constructor() public {
- address owner = msg.sender;
- balance[owner] = 420; }
- mapping (address => uint256) public balances;
- function send(uint amount, address recipient) public {
- require(balances[msg.sender] >= amount);
- require(balances[msg.sender] -amount <= balances[msg.sender]); require(balances[recipient] + amount >= balances[recipient]);
- balances[msg.sender] -= amount; // Always subtract first balances[recipient] += amount; // Add amount to recipient
- }
- }
如果您完成了最終合同,您就可以將其部署到區塊鏈上。