手把手在以太坊 Rinkeby 測試網路部署 ERC20 智能合約,並轉送 ERC20 Token。

手把手在以太坊 Rinkeby 測試網路部署 ERC20 智能合約,並轉送 ERC20 Token。

0、參考:

(1)OpenZeppelin ERC20 源碼分析:
https://yuanxuxu.com/2018/06/27/openzeppelin-erc20-code-analysis/
(2)ERC20 Token 使用手冊:
https://medium.com/taipei-ethereum-meetup/erc20-token%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8A-3d7871c58bea
(3)生產環境手把手部署 ERC20 智能合約
https://www.cnblogs.com/xiaoxiaoleo/p/9146031.html
(4)手把手教你發行自己的以太坊 ERC20 Token:
https://www.jianshu.com/p/e6ca8122a3a3

1、安裝 MetaMask Chrome 套件,並取得一組以太坊 Ethereum 私鑰及地址,請先參考下列文章說明:

https://steemit.com/rinkeby/@oneleo/metamask-chrome-ethereum
https://steemkr.com/rinkeby/@oneleo/metamask-chrome-ethereum

2、免費取得以太坊 Ethereum Rinkeby 測試網路的以太幣,請參考下列文章說明:

https://steemit.com/rinkeby/@oneleo/ethereum-rinkeby
https://steemkr.com/rinkeby/@oneleo/ethereum-rinkeby

3、開始建立屬於自己的 ERC20 Token。

本處使用的 OpenZeppelin 是主打安全及受到和社群審查的智能合約專案,可用來建立安全的智能合約,本處則使用此專案的 ERC20 智能合約來建立安全的 ERC20 Token。

(1)至 https://github.com/OpenZeppelin/openzeppelin-solidity 點選【Clone or download】下載 OpenZeppelin 專案。

(2)將 openzeppelin-solidity 專案解壓縮(此處以解壓縮至「%USERPROFILE%\Downloads\SmartContract」目錄為例)。

(3)在開啟 Remix 線上編譯環境前,請先確認 Chrome 瀏覽器右上角的 MetaMask 是否已選到以太坊【Rinkeby Test Net】,且是指到地址為「0x131746C3CaB2C6525DCCb1854458CdeE8199098F」的【Account 1】。

(4)開啟 https://remix.ethereum.org 線上編輯環境,並點選左上角【Add Local file to the Browser Storage Explorer】鈕將下列 OpenZeppelin 專案檔案匯入:

a、%USERPROFILE%\Downloads\SmartContract\contracts\examples\SimpleToken.sol
b、%USERPROFILE%\Downloads\SmartContractIn\contracts\token\ERC20\StandardToken.sol
c、%USERPROFILE%\Downloads\SmartContractIn\contracts\token\ERC20\BasicToken.sol
d、%USERPROFILE%\Downloads\SmartContractIn\contracts\token\ERC20\ERC20.sol
e、%USERPROFILE%\Downloads\SmartContractIn\contracts\token\ERC20\ERC20Basic.sol
f、%USERPROFILE%\Downloads\SmartContractIn\contracts\math\SafeMath.sol

(5)將六個檔案匯入至 Remix 畫面如下:

(6)此時因為每一個檔案在 Remix 編譯環境均在同一個「browser」目錄底下,故要進行修正,首先修改 BasicToken.sol 檔第 3 列(修改 import 位址):

pragma solidity ^0.4.24;


import "./ERC20Basic.sol";
import "./SafeMath.sol";
// …(下略)

(7)同樣,修改 SimpleToken.sol 第 4 列(修改 import 位址);以及可順便更改第 15 列(自行定義的 Token 名稱)、第 16 列(自行定義的 Token 縮寫):

註:為方便教學,這邊均採預設的 SimpleToken 及 SIM 縮寫。
註:Decimals 則是此 Token 允許的小數點位數,這邊均採預設的 18 位數。

pragma solidity ^0.4.24;


import "./StandardToken.sol";


/**
* @title SimpleToken
* @dev Very simple ERC20 Token example, where all tokens are pre-assigned to the creator.
* Note they can later distribute these tokens as they wish using `transfer` and other
* `StandardToken` functions.
*/
contract SimpleToken is StandardToken {

  string public constant name = "SimpleToken"; // solium-disable-line uppercase
  string public constant symbol = "SIM"; // solium-disable-line uppercase
  uint8 public constant decimals = 18; // solium-disable-line uppercase

  uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));
// …(下略)

(8)以上修改完成後,右側點選【SimpleToken】,再點選右上角【Start to compile】,並且在右側出現六個 BasicToken、ERC20、ERC20Basic、SafeMath、SimpleToken、StandardToken 綠色編譯成功的資訊。

註:若無法點選【SimpleToken】,則可嘗試直接點選【Start to compile】來嘗試編譯。

(9)點選右上角【Run】標籤,並按照以下數值設置:

「Enviroment」=【Inject web3】
「Account」=【0x131746C3CaB2C6525DCCb1854458CdeE8199098F】(會自動偵測目前 MetaMask 指到的 Account 1 帳號錢包)
「Gas limit」=【3000000】(使用預設的數值即可)

→ 接著點選要部署到以太坊 Rinkeby 測試網路的【SimpleToken】檔案 → 再來點選【Deploy】開始部署。

(10)因為部署智能合約需要支付手續費,此時會自動跳出 MetaMask 支付以太幣通知,因為之前已取得數枚測試用以太幣,所以直接點選【SUBMIT】支付。

(11)部署成功後可看到 Remix 編譯器下方會顯示部署成功訊息,此時先點選右側下方「SimpleToken at 0x906637756CD20f232d9CB85D45A28d1143292bad」的【複製】鈕將此 ERC20 Token 的地址複製起來。

(12)接著點選 Chrome 瀏覽器右上角的【MetaMask】→ 點選「Account 1」下方的【TOKENS】→ 點選【ADD TOKEN】。

(13)然後按照以下輸入數值:

「Token Contract Address」=【0x906637756cd20f232d9cb85d45a28d1143292bad】(即為剛才複製的 ERC20 智能合約地址)
「Token Symbol」=【SIM】(會自動填入)
「Decimals of Precision」=【18】(預設即可)→ 點選【Add】

(14)此時就可以在 MetaMask 上看到「Account 1」帳號底下已經有10000.000 顆 SIM ERC20 Token 入帳了。

4、下一步就是要將以太坊 Rinkeby 測試網路的 SIM ERC20 Token 轉到其他帳戶底下(這邊為方便起見,是將 SIM Token 轉到自己的 Account 1 地址下)。

(1)至 MyEtherWallet https://www.myetherwallet.com/ 平台點選右上方【Rinkeby (etherscan.io)】指定以太坊 Rinkeby 測試網路。

(2)接著點選上方【Send Ether & Tokens】→ 點選左側【MetaMask / Mist】。

(2)在點選「Connect to MetaMask」前,請先確認 Chrome 瀏覽器右上角的【MetaMask】是選到以太坊【Rinkeby Test Net】,且是指到地址為「0x131746C3CaB2C6525DCCb1854458CdeE8199098F」的【Account 1】。

(3)點選【Connect to MetaMask】後 MyEtherWallet 會和目前的 MetaMask 帳號連動,並進到錢包主控台,我們直接點選右下角的【Add Custom Token】。

(4)此時會要求我們輸入 SIM ERC20 Token 智能合約的地址,假設我們已忘記此 ERC20 智能合約的地址了,所以點選瀏覽器右上角的【MetaMask】是選到以太坊【Rinkeby Test Net】→ 再點選「Account 1」右邊的【…】→ 再點選【View account on Etherscan】開啟錢包瀏覽器。

(5)可以看到此帳號之前建立 ERC20 智能合約的轉帳項目 → 點選那一筆轉帳項目右方的【Contract Creation】鈕。

(6)就可以看到這條 ERC20 智能合約的地址了(本處智能合約地址為:0x906637756CD20f232d9CB85D45A28d1143292bad)。

(7)回到 MyEtherWallet 畫面,並依序輸入以下資訊:

「Token Contract Address」=【0x906637756CD20f232d9CB85D45A28d1143292bad】(即為剛才看到的 ERC20 智能合約地址)
「Token Symbol」=【SIM】(當時在編譯 ERC20 智能合約時指定的 Token Symbol 名稱,這邊為 SIM)
「Decimals」=【18】(當時在編譯 ERC20 智能合約時指定的 Decimals 位數,這邊為 18)

→ 輸入完成後點選【Save】。

(8)新增完成後,即可在「Amount to Send」右側點選到【SIM】ERC20 Token 了。

(9)接下來要將此 SIM Token 轉出,為方便起見,這邊轉出的帳戶為自己的帳戶,請依照以下輸入:

「To Address」=【0x131746C3CaB2C6525DCCb1854458CdeE8199098F】
「Amount to Send」=【5000】【SIM】
「Gas Limit」=【42000】(因為轉 ETC20 Token 需要傳送較多資料,故提高手續費以增加轉帳成功機率)

→ 點選【Generate Transaction】→ 點選【Send Transaction】。

(10)接下來會出現確認明細,只需要確認最下方的訊息即可 → 點選【Yes, I am sure! Make transaction.】。
最下方的訊息為:「You are about to send 5000 SIM to address 0x131746C3CaB2C6525DCCb1854458CdeE8199098F」

註:為什麼上方的「To Address」的地址會和下方顯示的地址不同?
→ 因為 ERC20 智能合約的特性,轉帳時是針對「此智能合約的地址」來轉帳,而「多少」ERC20 Token、以及要轉到哪一個「地址」等等資訊,實際上是轉換成「16 進制」碼後打包到「Data」欄位中送出。

(10)因為轉 ERC20 Token 也需要支付手續費,此時會自動跳出 MetaMask 支付以太幣通知,直接點選【SUBMIT】支付。

(11)確認 SIM Token 是否有成功轉出,點選瀏覽器右上角的【MetaMask】→ 選到以太坊【Rinkeby Test Net】→ 再點選「Account 1」右邊的【…】→ 點選【View account on Etherscan】鈕。

(12)可以看到剛才的交易已完成 → 再來點選【Token Transfers】。

(13)這邊就可以看到剛才的 SIM ERC20 Token 確實有成功轉出,但是是因為是轉回到自己的地址,所以點選「Token Balances:」右邊的【View ($0.00)】可以看到 SIM Token 仍然是 10,000 顆。


Donate ADA:
DdzFFzCqrhsup2Q4nnhKJJZ5BRuPkYUSPqDJn72t2dtHtVqsz5kQQmopMQR16Sv9qS5NC4w8Kv5P8XrDH2n2FD2akxtrntjc8hbgAmTz

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center