1. 程式人生 > >solidity 智慧合約之間的呼叫

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);
    }
}

呼叫介面是傳遞的引數依舊同第一種情況。

原文連結:https://www.choupangxia.com/2019/07/30/solidity-%e6%99%ba%e8%83%bd%e5%90%88%e7%ba%a6%e4%b9%8b%e9%97%b4%e7%9a%84%e8%b0%83%e7%94%a8/

公眾號

csd   
 
 </div> 
 <div class=

相關推薦

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