官术网_书友最值得收藏!

  • Mastering Ethereum
  • Merunas Grincalaitis
  • 449字
  • 2021-06-24 15:01:04

Addresses

In Solidity 0.4.0, there was only one type of address. Now, we have two types to define whether an Ethereum address should be payable or not.

An address contains the account number of each user in Ethereum. It's a 42-character piece of hexadecimal text, such as this one:

0xeF5781A2c04113e29bE5724ae6E30bC287610007

To create an address variable in your contract, you have to define it as follows:

pragma solidity 0.5.0;
contract Example {
address public myAddress = 0xeF5781A2c04113e29bE5724ae6E30bC287610007;
}

Addresses don't have quotes because they are not strings of text. In this version of Solidity, you must define the type of address, which could be one of the following:

  • Address payable: A payable address is a new type of variable introduced in Solidity 0.5 that allows the address to receive and store Ether inside. Previously, all addresses were payable, now only those explicitly marked as payable will be able to receive or send Ether and use functions that deal with Ether, such as .transfer() or .send().
  • Address: A normal address that can't receive or send Ether to prevent users from doing so.

You define the payable addresses as follows:

address payable public myAddress;

It's useful to have payable addresses when you want to send Ether to that address. For instance, let's say that user A wants to receive 10 ether from the balance stored in the smart contract. They would do something like the following:

pragma solidity 0.5.0;
contract TransferExample {
address payable public userAAddress;
function transferFunds() public {
userAAddress.transfer(10 ether);
}
}

So, user A would receive 10 ether from the funds stored in this smart contract.

Another important aspect of the addresses is that you sometimes need to access the address of the current smart contract, because, as you know, smart contracts can hold Ether inside.

To get the address of your smart contract, use the following code:

address public myContractAddress = address(this);

Here, this is the special keyword used to reference the active smart contract being used at that moment. But because it is an instance of a smart contract, you need to convert that instance to an address with the type conversion function, which essentially gets the address of this smart contract.

You can also access the balance of this smart contract with the .balance function as follows:

uint256 public myContractBalance = address(this).balance;

That will return the number of wei in the smart contract, useful for making transfers with the transfer() function:

myUserAddress.transfer(address(this).balance);

That will send myUserAddress all the Ether stored inside this contract.

You can convert payable addresses to normal addresses, but not the other way around, based on the fact that payable addresses are an augmented version with additional functions that can't be passed easily.

主站蜘蛛池模板: 乐安县| 灵寿县| 忻城县| 蓝山县| 富宁县| 宜州市| 无棣县| 同心县| 鱼台县| 嵩明县| 仙游县| 焦作市| 凭祥市| 富川| 商城县| 乌兰县| 工布江达县| 普安县| 安龙县| 霍州市| 阜城县| 翁牛特旗| 旺苍县| 佛山市| 武城县| 策勒县| 金坛市| 四会市| 通渭县| 绿春县| 庆阳市| 资中县| 东乡县| 乌拉特后旗| 余江县| 深圳市| 舒城县| 萍乡市| 林州市| 彩票| 灵山县|