实验3.1 以太坊的地址
赫拉克利特说过“人不能两次踏进同一条河流”。阐述了物质的固有属性是运动,而运动是绝对的,无条件,永恒的。相对于静止,我们也要承认它的相对性与条件性。在Solidity中,地址的存在毫无疑问是它的一大特色。就像“人们不可能两次创建同一个合约(地址)”一样,合约地址的唯一性保证了它的相对静止,合约创建与逻辑提供了它的绝对运动。也就是在这动与静中,舒展着它对哲学的思索。
实验目的
1. 明白Solidity的两种地址(合约地址,外部地址)的基本形式
2. 了解如何判断合约地址与外部地址
实验要求
1. 查看下面的代码,请先将你部署页面的第一个账户赋值给externalAccount。然后编译部署。将部署的合约地址赋值给contractAccount,再重新编译与部署。然后请你按照注释的要求将accountToUint函数补充完整。
2. 请先思考合约地址与外部地址的长度是否一样?然后调用judge函数,查看该两者地址是否可以比较?
3. 编译与部署该合约,调用isContract函数,分别传入externalAccount与contractAccount的地址值。查看这两个地址的返回值分别是什么?思考它是如何进行两种地址判断的。
以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract account{
address externalAccount = ;
address contractAccount ;
//请你补充accountToUint函数,使得地址类型的contractAccount转换为定长Uint类型,并返回该值。
function accountToUint() public view returns(uint){
}
function judge() public view returns(bool){
return externalAccount > contractAccount;
}
function isContract(address addr) public view returns (bool) {
uint256 size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}
下面是本次实验所配套的视频教程: