計算機和人一樣,通過多種語言進行交流。Solidity和Vyper是以太坊區塊鏈中兩種最常見的語言。在第1課中,我們介紹了Vyper(一種以太坊智能合約編程語言),併與Solidity進行了比較。而在本節中,我們將深入探討Vyper的語法,它與Python的語法非常相似。Vyper的目標之一是使智能合約編碼更加簡單,衕時保持良好的安全性。它的語法旨在盡可能簡單明了。如果您是Python編程人員,您會感到非常熟悉。即使不是,Vyper類似Python的語法也很容易學習。我們來看看Vyper的主要語法構成。
Python
# This is a comment in Vyper
@external
def greet(name: string[10]) -> string[30]:
return concat("Hello, ", name, "!")
數據類型是任何編程語言的構建塊,定義了程序中可以存儲和操作的數據類型。讓我們來看看Vyper提供的一些基本數據類型:
flag:bool=True
int128
。示例:count: int128 = 10
price: decimal = 123.45
name: string[20] = 'Alice'
numbers: int128[5] = [1, 2, 3, 4, 5]
總的來説,Vyper提供的值有:
bool
int128
uint256
decimals
address
bytes32
Bytes
String
Python
# @version ^0.3.7
b: public(bool)
i: public(int128) # -2 ** 127 to (2 ** 127 - 1)
u: public(uint256) # 0 to 2 ** 256 - 1
dec: public(decimal) # -2 ** 127 to (2 ** 127 - 1), 10 decimal places
addr: public(address)
b32: public(bytes32)
bs: public(Bytes[100])
s: public(String[100])
@external
def __init__():
self.b = False
self.i = -1
self.u = 123
self.dec = 3.14
self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e26ae84b525cdacb
self.bs = b"\x01"
self.s = "Hello Vyper"
與許多其他編程語言一樣,Vyper中的函數是執行特定任務的可覆用代碼塊。它們使您的應用程序具有更好的模塊性,併允許代碼覆用。
與Python一樣,在Vyper中,您可以使用def
關鍵字定義函數。函數也有參數列錶和返回類型。下麵是一個簡單的Vyper函數:
Python
@external
def add(a: int128, b: int128) -> int128:
return a + b
使用@external
修飾符可以從合約外部調用此函數(通過交易或其他合約)。如果沒有此修飾符,該函數隻能在定義它的合約內進行調用。
@internal
函數隻能在合約內部調用。
@external
函數隻能從合約外部調用。
示例:
Python
# @version ^0.3.7
# Internal functions can only be called inside this contract
@internal
@pure
def _add(x: uint256, y: uint256) -> uint256:
return x + y
@external
@view
def extFunc() -> bool:
return True
# External functions can only be called from outside this contract
@external
@view
def avg(x: uint256, y: uint256) -> uint256:
# cannot call other external function
# self.extFunc()
# can call internal functions
z: uint256 = self._add(x, y)
return (x + y) / 2
@internal
@pure
def _sqr(x: uint256) -> uint256:
return x * x
@external
@view
def sumOfSquares(x: uint256, y: uint256) -> uint256:
return self._sqr(x) + self._sqr(y)
控製結構用於根據不衕的決策執行不衕的操作。Vyper提供了幾種控製結構,包括if語句、for循環和while循環。
if
語句是最基本的控製結構,隻有在指定條件爲真時才執行代碼塊。
Python
@external
def is_greater_than_ten(a: int128) -> bool:
if a > 10:
return True
else:
return False
Vyper中的for
循環與Python的語法相衕。您可以對列錶、元組、集合等中的每個項執行一組語句。
Python
numbers: int128[5] = [1, 2, 3, 4, 5]
@external
def sum_numbers() -> int128:
sum: int128 = 0
for i in range(5):
sum += self.numbers[i]
return sum
隻要給定條件爲真,Vyper中的while
循環就會重覆執行目標語句。
Python
@external
def count_to_ten() -> int128:
count: int128 = 0
while count < 10:
count += 1
return count
在編程中,錯誤處理對於處理運行時錯誤併曏用戶提供有意義的報錯消息至關重要。Vyper使用assert
語句來處理錯誤。
Python
@external
def divide(a: decimal, b: decimal) -> decimal:
assert b != 0, "Cannot divide by zero"
return a / b
在上述代碼中,如果b
爲零,則將出現錯誤提示”不能除以零”,且交易將被還原。否則,將繼續進行除法操作。
Vyper還提供了revert
語句,可用於停止當前調用的執行併還原狀態更改,衕時還提供報錯消息。
以上是對Vyper語法和基本原理的簡要介紹。與任何編程語言一樣,掌握Vyper的關鍵是勤加練習。我建議使用這些技巧編寫簡單的應用程序。在下一節中,我們將介紹如何使用Vyper構建和維護智能合約。請繼續關註!
恭喜大家完成第2課的學習!到現在,您應該已經掌握了Vyper的語法和基本結構,包括基本數據類型、函數、控製結構以及Vyper中的錯誤處理,它們是Vyper程序的基礎。了解這些核心組成部分非常重要,因此一定要多多練習,不斷探索。您可以試著利用今天所學的知識創建簡單的程序。要熟練撰寫代碼,親自動手操作是唯一途徑。
大家可以更深入地探索使用Vyper構建以太坊智能合約。在第3課中,我們將探討更覆雜的Vyper原則,以實踐爲基礎,專註於在以太坊網絡上設計、實施和使用智能合約。區塊鏈技術是一個非常廣闊的世界,處於不斷髮展變化中。作爲區塊鏈工程師,我們應該有著持續的髮現和學習精神。您前進的每一小步,都將成爲通往精通編程路上的重要一步。請大家繼續加油,我們在第3課中見!
計算機和人一樣,通過多種語言進行交流。Solidity和Vyper是以太坊區塊鏈中兩種最常見的語言。在第1課中,我們介紹了Vyper(一種以太坊智能合約編程語言),併與Solidity進行了比較。而在本節中,我們將深入探討Vyper的語法,它與Python的語法非常相似。Vyper的目標之一是使智能合約編碼更加簡單,衕時保持良好的安全性。它的語法旨在盡可能簡單明了。如果您是Python編程人員,您會感到非常熟悉。即使不是,Vyper類似Python的語法也很容易學習。我們來看看Vyper的主要語法構成。
Python
# This is a comment in Vyper
@external
def greet(name: string[10]) -> string[30]:
return concat("Hello, ", name, "!")
數據類型是任何編程語言的構建塊,定義了程序中可以存儲和操作的數據類型。讓我們來看看Vyper提供的一些基本數據類型:
flag:bool=True
int128
。示例:count: int128 = 10
price: decimal = 123.45
name: string[20] = 'Alice'
numbers: int128[5] = [1, 2, 3, 4, 5]
總的來説,Vyper提供的值有:
bool
int128
uint256
decimals
address
bytes32
Bytes
String
Python
# @version ^0.3.7
b: public(bool)
i: public(int128) # -2 ** 127 to (2 ** 127 - 1)
u: public(uint256) # 0 to 2 ** 256 - 1
dec: public(decimal) # -2 ** 127 to (2 ** 127 - 1), 10 decimal places
addr: public(address)
b32: public(bytes32)
bs: public(Bytes[100])
s: public(String[100])
@external
def __init__():
self.b = False
self.i = -1
self.u = 123
self.dec = 3.14
self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e26ae84b525cdacb
self.bs = b"\x01"
self.s = "Hello Vyper"
與許多其他編程語言一樣,Vyper中的函數是執行特定任務的可覆用代碼塊。它們使您的應用程序具有更好的模塊性,併允許代碼覆用。
與Python一樣,在Vyper中,您可以使用def
關鍵字定義函數。函數也有參數列錶和返回類型。下麵是一個簡單的Vyper函數:
Python
@external
def add(a: int128, b: int128) -> int128:
return a + b
使用@external
修飾符可以從合約外部調用此函數(通過交易或其他合約)。如果沒有此修飾符,該函數隻能在定義它的合約內進行調用。
@internal
函數隻能在合約內部調用。
@external
函數隻能從合約外部調用。
示例:
Python
# @version ^0.3.7
# Internal functions can only be called inside this contract
@internal
@pure
def _add(x: uint256, y: uint256) -> uint256:
return x + y
@external
@view
def extFunc() -> bool:
return True
# External functions can only be called from outside this contract
@external
@view
def avg(x: uint256, y: uint256) -> uint256:
# cannot call other external function
# self.extFunc()
# can call internal functions
z: uint256 = self._add(x, y)
return (x + y) / 2
@internal
@pure
def _sqr(x: uint256) -> uint256:
return x * x
@external
@view
def sumOfSquares(x: uint256, y: uint256) -> uint256:
return self._sqr(x) + self._sqr(y)
控製結構用於根據不衕的決策執行不衕的操作。Vyper提供了幾種控製結構,包括if語句、for循環和while循環。
if
語句是最基本的控製結構,隻有在指定條件爲真時才執行代碼塊。
Python
@external
def is_greater_than_ten(a: int128) -> bool:
if a > 10:
return True
else:
return False
Vyper中的for
循環與Python的語法相衕。您可以對列錶、元組、集合等中的每個項執行一組語句。
Python
numbers: int128[5] = [1, 2, 3, 4, 5]
@external
def sum_numbers() -> int128:
sum: int128 = 0
for i in range(5):
sum += self.numbers[i]
return sum
隻要給定條件爲真,Vyper中的while
循環就會重覆執行目標語句。
Python
@external
def count_to_ten() -> int128:
count: int128 = 0
while count < 10:
count += 1
return count
在編程中,錯誤處理對於處理運行時錯誤併曏用戶提供有意義的報錯消息至關重要。Vyper使用assert
語句來處理錯誤。
Python
@external
def divide(a: decimal, b: decimal) -> decimal:
assert b != 0, "Cannot divide by zero"
return a / b
在上述代碼中,如果b
爲零,則將出現錯誤提示”不能除以零”,且交易將被還原。否則,將繼續進行除法操作。
Vyper還提供了revert
語句,可用於停止當前調用的執行併還原狀態更改,衕時還提供報錯消息。
以上是對Vyper語法和基本原理的簡要介紹。與任何編程語言一樣,掌握Vyper的關鍵是勤加練習。我建議使用這些技巧編寫簡單的應用程序。在下一節中,我們將介紹如何使用Vyper構建和維護智能合約。請繼續關註!
恭喜大家完成第2課的學習!到現在,您應該已經掌握了Vyper的語法和基本結構,包括基本數據類型、函數、控製結構以及Vyper中的錯誤處理,它們是Vyper程序的基礎。了解這些核心組成部分非常重要,因此一定要多多練習,不斷探索。您可以試著利用今天所學的知識創建簡單的程序。要熟練撰寫代碼,親自動手操作是唯一途徑。
大家可以更深入地探索使用Vyper構建以太坊智能合約。在第3課中,我們將探討更覆雜的Vyper原則,以實踐爲基礎,專註於在以太坊網絡上設計、實施和使用智能合約。區塊鏈技術是一個非常廣闊的世界,處於不斷髮展變化中。作爲區塊鏈工程師,我們應該有著持續的髮現和學習精神。您前進的每一小步,都將成爲通往精通編程路上的重要一步。請大家繼續加油,我們在第3課中見!