以太坊智能合約編寫part1

本篇我們將介紹使用基於瀏覽器方式的Remix IDE來篇寫一個簡單的資產清單智能合約(使用Solidity語言)。Remix 讓我們專注於開發我們的智能合約,而不用去建立整個開發環境的底層或中間層。 Remix 提供了一個基本的 UI 來跟我們的智能合約進行交互,讓我們可以更快地重構和進化我們的智能合約。在這個練習中,我們會逐步變化代碼的內容以求讀者了解簡易的智能合約是如何編寫的。

首先我們需要進到Remix開發環境。

第一步

進入後我們會看到如下畫面

第一步我們需要在建立一個智能合約。請在contract這邊建立一個新檔案assest.sol(如下圖)。

然後我們就會看到右手邊多了空白的編寫區域(如下圖)

先將以下代碼copy到該檔案的開頭

// SPDX-License-Identifier: CC-BY-1.0
// Creative Commons Attribution 1.0 Generic

// Contract will be compiled on version 0.7.0 or greater
pragma solidity ^0.7.0;

// A smart contract to model a asset list
contract asset {

} //asset

第二步

我們需要加入一些變數(variables)。這個資產清單我們預計用來追蹤資產的數量變化。我們假設這一份資產清單有三個重要的屬性是要被追蹤紀錄的,分別是:

  1. 資產管理者,可能是一個人或一個部門
  2. 資產名稱
  3. 資產數量

編寫後如下圖

Solidity的資料型態,如下表

另外int/uint的數字範圍如下

另外在篇寫程式中我們會用到一些資料結構,如下圖。

哪這種資料結構是存在哪裡呢?

基本上存在於兩種地方:

  • storage — 這是存在於區塊鏈的合約中,所以它可被多個函數呼叫。
  • memory — 這是在函數啟用期間建立的,然後永遠都會有轉存。

接下來我們需要對這個代碼進行compiling然後佈署這個智能合約到以太網路。我們游標移動到最左邊的功能bar(如下圖)。

然後按下compile asset1.sol,如果成功我們不會看到錯誤訊息並且看到編譯成功的符號(如下圖)。

接下來我們要將此智能合約佈署到以太網路中。我們點選功能bar的最後一個"Deploy & run transactions"的功能(如下圖)。

所有的參數我們先使用預設值,直接點選Deploy。如果成功我們會在代碼編寫區的下方看成功的符號,並且Deployed Contracts這一個區域看到一個合約被佈署並等待執行。(如下圖)

我們把這個合約展開之後可以看到這個合約會有一個獨有的地址(如下圖)。只要每次佈署智能合約,不管對我們來說是不是同一個智慧合約。它都會產生一個獨有的地址。

但我們可以看到,我們沒有辦法與這個合約互動。因為我們並沒有把它expose出來。我們需要對我們的變量加上範圍,請在三個變量中加上public字串(如下圖)。

這裡說明一下Solidity 對函數和變量都有四種類型的可見性:

  • Public — 這允許我們定義可以在內部或通過訊息呼叫的函數或變量。
  • Private — 私有變量和函數僅對當前合約可用,對衍生的合約是不能用的。
  • Internal — 只能在內部存取的函數和變量(當前的合約或衍生的)。
  • External — 可以從其他合約和交易中呼叫的函數。 它們不能用在內部呼叫,除非使用“this.functionName()”。

將public加上去之後,我們需要重新編譯跟佈署這個更改過的合約。這時我們就可以跟合約互動了(如下圖)。

但我們可以看到,點選這幾個按鈕並有有產生任何資料。資料產生的方式可以用靜態(固定的),動態的(可以自行輸入的)。靜態的方式就是直接在該變量加上去(如下圖)。

一樣需要重新編譯跟佈署,然後就可以get到資料

第三步

加入一個 Constructor。許多開發語言都可以expose其構造函數(Constructor function),這是一個在部署或invoke程序時自動呼叫的特殊函數。 構造函數主要在包含最初應執行一次以準備應用程序使用的任何邏輯。

Solidity 還為開發人員提供了在智能合約中定義構造函數的能力。 讓我們更新我們的資產智能合約,以便通過構造函數而不是在變量函數中直接寫死(如下圖)。

到現在我們已經佈署了三個合約,每個合約都是獨立並可以與之交戶的。

再來我們可以設立一個常數,例如宣告這個合約的擁有者或編寫者(如下圖)。

第四步

動態的加入資料,使用get與set函數。請加入以下代碼(如下圖)。

--

--

運用"雲端服務"加速企業的數位轉型願景
運用"雲端服務"加速企業的數位轉型願景

Written by 運用"雲端服務"加速企業的數位轉型願景

我們協助您駕馭名為"雲端運算"的怪獸,馴服它為您所用。諮詢請來信jason.kao@suros.com.tw. https://facebook.com/jason.kao.for.cloud

No responses yet