赫拉克利特说过“人不能两次踏进同一条河流”。阐述了物质的固有属性是运动,而运动是绝对的,无条件,永恒的。相对于静止,我们也要承认它的相对性与条件性。在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;
    }
}


下面是本次实验所配套的视频教程: