solidity 智慧合約之間的呼叫
智慧合約之間的呼叫
在區塊鏈上,有些功能往往無法通過一個智慧合約完成,此時便會用到智慧合約之間的呼叫。本篇文章帶大家通過具體示例來了解一下智慧合約之間的呼叫。
在智慧合約的編譯過程中,有兩種情況:呼叫者和被呼叫者在一個sol檔案中和分別在不同的檔案中。
同sol檔案的智慧合約呼叫
在下面的智慧合約中,Demo1和Demo在同一個檔案中,可進行同時編譯,然後逐個釋出。
pragma solidity ^0.5.10; contract Demo1{ uint public data; function setData(uint _data) public { data = _data; } } contract Demo2{ function toSetData(Demo1 demo1,uint _data) public { demo1.setData(_data); } }
當釋出完成,可通過第Demo2的toSetData方法進行Demo1方法的呼叫。傳遞的第一個引數為Demo1的智慧合約地址,第二個引數為要設定的值。
不同sol檔案的智慧合約呼叫
在大多數情況下,兩個智慧合約不存在於同一個sol檔案中,那麼就需要使用另外一種形式來進行呼叫。還拿呼叫Demo1方法來舉例,用另外一個sol檔案中的Demo3來呼叫Demo1。
首先需要宣告介面,然後在Demo3中直接呼叫對應的介面。
pragma solidity ^0.5.10; contract Demo1{ function setData(uint _data) public; } contract Demo3{ function toSetData(Demo1 demo1,uint _data) public { demo1.setData(_data); } }
呼叫介面是傳遞的引數依舊同第一種情況。
公眾號
相關推薦
solidity 智慧合約之間的呼叫
智慧合約之間的呼叫 在區塊鏈上,有些功能往往無法通過一個智慧合約完成,此時便會用到智慧合約之間的呼叫。本篇文章帶大家通過具體示例來
solidity智慧合約[10]-動態位元組陣列
動態位元組陣列的定義 bytes 變數名 = new bytes(大小); 動態位元組陣列的屬性 可以修改大小和長度 動態位元組陣列預設初始化為0 bytes public name = new bytes(2);name的值一開始為0x0000 動態位元組陣列的賦值
solidity智慧合約[9]-位元組陣列與運算
byte型別 有byte bytes1 bytes2 … bytes32特殊的有byte == bytes1 後面的數字代表佔了多少位元組。1個位元組在記憶體中佔了8位 性質 固定位元組陣列不能修改長度和內容 位元組一般用16進位制來儲存 16進制中的1個數字代表佔了4位。
solidity智慧合約[8]-位運算與字面量
位運算 solidity中,可以對於最底層的位進行操作。由於以太坊中需要消耗gas,因此,為了節約gas、所以對於位的操作會用到比較頻繁。solidity中支援多種型別的位運算操作1、位與 &2、位或 |3、位異或 ^4、位取反 ~5、<<6、>> 數字3、4的二進位制
solidity智慧合約[7]-整型與運算
整型變數 整數是現實中處理最多的單位,在solidity中的整數型別有int和uint,int型別可以儲存負數,uint型別只能夠儲存非負數。int型別:int8,int16,int24,int32…int256uint型別:uint8,uint16,uint24,uint32…uint256 後面的
solidity智慧合約[6]-基本型別與bool運算
變數 儲存資料的抽象單位,代表記憶體中的一段空間。 型別 同其他的程式語言一樣,solidity中也有許多基本的型別。型別決定了儲存空間的大小和解析的方式。下面列舉出了solidity中基本的型別int、uint、byte、string、bool 基本型別 bool型別 這一小節
solidity智慧合約[5]——一筆交易詳解
在之前,我們已經寫好了一個最簡單的helloworld合約,如下: 1234567891011121314151617 pragma solidity ^0.4.23;contract HelloWorld{ string public name
solidity智慧合約[4]-pure與view剖析
pure與view程式碼例子 如下的一段solidity智慧合約中,只要有了pure與view修飾符的函式,那麼呼叫函式就不會消耗gas。而沒有pure與view修飾的函式,如下面的change就會消耗gas。 12345678910111213141516171819
solidity智慧合約[19]-for迴圈
for for 語句為"當型"迴圈結構。for語句的語法為: 123 for ( 表示式 1; 表示式 2; 表示式){ 語句} 說明:表示式 1為迴圈變數賦初始值。表示式 2為迴圈條件。表示式 3為迴圈變數增值。 for迴圈列印斐波拉
solidity智慧合約[18]-twoarray
二維陣列定義 1 uint[2][3] grade = [[60,80],[40,20],[50,50]]; 返回二維陣列 1234 function getGrade() view public returns(ui
solidity智慧合約[17]-動態長度陣列
動態長度陣列 動態長度陣列可以改變大小和長度 動態長度陣列的定義 uint[] grade=[1,2,3,4,5]; 返回動態長度陣列 123 function getArray() public view returns(uint[]){ &nbs
solidity智慧合約[16]-固定長度陣列
陣列 記憶體中的一片連續區域 定義 12 int[7] math;bytes2[3] bytesTest; 賦值 1 uint[5] public grade =[1,2,3,4,5];
solidity智慧合約[15]-fixtostring
固定位元組陣列轉string 固定位元組陣列轉換為string沒有好的辦法,必須要首先將固定位元組陣列轉換為動態位元組陣列,再將動態位元組陣列轉換為string 123456789101112 //bytes2 -> bytes  
solidity智慧合約[14]-動態位元組陣列轉換為string
動態位元組陣列轉換為string 動態位元組陣列可以通過string(name)非常直接的轉換為string型別,下面為例子: 1234567891011121314 pragma solidity ^0.4.23;contract dynamicTostring{ &
Solidity 語言學習(2)—— Solidity智慧合約檔案結構
版本申明 pragma solidity ^0.4.0; 說明: 1 版本要高於0.4才可以編譯 2 表示高於0.5的版本則不可編譯,第三位的版本號但可以變,留出來用做bug可以修復(如 0.4.1的編譯器有bug,可在0.4.2 修復,現有合約不用該程式碼)。 引用其他
solidity智慧合約[29]-函式作用域
函式重名與函式作用域問題 1、當狀態變數中已經有了一個變數a、狀態變數中就不能夠再有一個同名的狀態變數。2、當狀態變數中和函式體內部已經有了都有一個同名的函式的時候,預設處理的是函式體內部的變數。也就是說,變數的操作和其他語言一樣,仍然滿足就近原則。 12345678910
solidity智慧合約[28]-函式返回值
函式返回值一般形式 12345678910 function resValue() pure public returns(uint){ uint a = 10; return a;}function &nb
solidity智慧合約[27]-函式與函式過載
函式的一般形式 1 function (<parameter types>) {public|internal|external} [pure|constant|view|payable] [returns (<return types>)]
solidity智慧合約[26]-mapping
mapping mapping是一張表,儲存key-value對。更準確的說,mapping是一張hash對映表,內部並沒有儲存真實的key值。 mapping用例 下面的案例模擬了一個登陸網站,將地址與id繫結在一起。id又與姓名繫結在一起。 12345678910111
solidity智慧合約[25]-轉賬的3種方式與比較
轉賬的3種方式 123 address.transfer()address.send()address.call.value().gas()() 轉賬transfer 12345678910 function tran