智能合约 | solidity中巧用复合类型以及合约的测试方法

177 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

复合类型的巧妙使用

在solidity中,除了内置的原生数据类型,还有一些复合类型,主要包括数组、映射等容器和自定义结构体

复合类型--数组

在solidity中,它支持定长数组和动态数组,但不管是定长数组还是动态数组,它们都有length元素,代表着数组组内元素的个数。因此,若要访问数组的元素,可以通过下标,动态数组可以通过push函数添加值

  • 代码示例:
// SPDX-License-Identifier: GPL-3.0
pragma  solidity ^0.8.0;

contract stringTest{
            //定长数组
        string[4] public nameTest;
            //动态数组
        uint[] public num;

function arrayTest ( )public returns(uint,uint){
        //赋值的形式,如果是中文需要使用UTF-8编码。
    nameTest[0]="JueJin";
    //push添加值
    num.push(20);
    return (num.length,nameTest.length);
}
      }

复合类型-映射(mapping)

solidity的mapping与Golang中的map非常类似,mapping也是基于键值对存储的容器,我们如果知道key,就能快速的知道其value值

  • 语法
        mapping(T1 => T2) modifiers name
        
    //    T1:数据类型一
    //  T2:数据类型二
    //  通过T1类型映射出T2类型
  • 代码示例(部分)
// 创建一个mapping
mapping(address=>string) public MapNames;

        address public owner  ;
constructor (){
//合约主持人
       owner=msg.sender;

 }
 // 设置,初始化一个mapping
 function SetmappingTest(string memory _x)public  {
       MapNames[owner]=_x;

}
//查询
function getmapTest( address  addr)public view returns(string memory){
   
       return MapNames[addr];
}

合约的使用方法

编译合约

image.png 我们启动了自动编译,如果没用就点击Compile ···.sol

部署合约

点击deploy即可部署合约。

image.png

使用函数

image.png

  • 我们先测试一下owner,运行结果一个是操作合约的地址: 通过验证是一致的: image.png

image.png

测试mapping:

  • 初始化mapping:点击红框按钮 image.png 当我们看到控制台出现类似下图则说明成功:

image.png

  • 查询:然后我们复制操作该函数的账户并粘贴到红框内:

image.png

点击call:

image.png 说明成功了!!!!!