[Solidity] So sánh address và address payable trong Solidity

Đăng bởi Lưu Đại vào ngày 26-03-2023

1. Address và Addressable là gì? 

- address và addressable đều là kiểu dữ liệu 20 bytes để chứa địa chỉ Ethereum
* Mỗi tài khoản ethereum đều có một địa chỉ định danh duy nhất, nó là public key trỏ vào ví ethereum của tài khoản đó. 

2. Sự khác nhau giữa address và address payable trong Solidity.

- Hai kiểu dữ liệu này gần như giống nhau, chỉ duy nhất khác nhau ở giai đoạn compile time address payable thì có thể gọi hàm transfer() và send() trong khi address thì không.
- Từ address payable có thể ép kiểu thành address theo 2 cách 
// implicitly 
address payable addr_payable = payable(msg.sender)
address addr = addr_payable 
// explicitly
address addr_ = address(addr_payable)
- Muốn ép kiểu address sang address payable thì chỉ có 1 cách
// explicitly
address addr = msg.sender 
address payable addr_payable = payable(addr) 
- Payable chỉ như một cách đánh dấu xem địa chỉ có thể gửi nhận ethereum không thôi. Mục đích chỉ là để cho ngôn ngữ chặt chẽ hơn giảm trường hợp địa chỉ bị trừ hoặc nhận ethereum do lỗi logic khi code.