年轻人的第一个智能合约

这篇具有很好参考价值的文章主要介绍了年轻人的第一个智能合约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

年轻人,是否想拥有你的第一个智能合约?

下面,我们将一起在 Remix 上编写、部署和测试年轻人的第一个智能合约,该合约实现了一个简单的区块链通讯录,主要包括如下几个功能:

  • 添加联系人,包括姓名和手机号;
  • 查询所有联系人姓名;
  • 查询指定联系人的手机号;

合约概览

智能合约代码使用 Solidity 编写,完整的代码如下所示:

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

contract BlockChainContactList {
    
    //“王五”,“13598534006”
    mapping(string => string) private nameToPhone;
    // 用于存储所有的名字
    string[] private names; 

    function addContact(string calldata _name, string calldata _phone) public {
        // 如果是新联系人,则添加到数组中
        if(bytes(nameToPhone[_name]).length == 0) { 
            names.push(_name);
        }
        nameToPhone[_name] = _phone;
    }

    function getContact(string calldata _name) public view returns (string memory) {
        return nameToPhone[_name];
    }

    function getAllContactNames() public view returns (string[] memory) {
        return names;
    }
}

Solidity 代码详解

下面我们来详细看一下上述代码的各个组成部分

许可声明

// SPDX-License-Identifier: MIT

这行代码是一个 SPDX 许可证标识符注释,用于明确指定智能合约源代码的许可证类型。上面的代码表明该智能合约遵循 MIT 许可,属于非常宽松的一种许可,允许人们几乎无任何限制地使用、复制、修改和分发软件,唯一的要求是在软件的所有副本和重要的文档内容中都必须包含版权声明和许可声明。

Solidity 版本声明

pragma solidity 0.8.24;

这行代码是Solidity语言中的一个编译指令,用于指定智能合约的编译器版本。这行代码告诉Solidity编译器,该合约是为Solidity版本0.8.24编写的,因此编译这个合约时应该使用版本0.8.24的编译器。除了上述指定版本的写法,还可以通过如下方式,指定版本的范围:


pragma solidity ^0.8.0; //表示合约兼容Solidity 0.8.0及以上的版本,但小于0.9.0(不包含0.9.0)。
pragma solidity >=0.8.0 <0.9.0; //具有相同的意义,表示合约兼容的版本范围是从0.8.0(包含)到0.9.0(不包含)

智能合约定义

contract BlockChainContactList {
    ............
}

上面的代码在 Solidity 中定义了一个名为 BlockChainContactList 的智能合约。在Solidity语言中,contract关键字用于声明一个新的智能合约,类似于许多面向对象编程语言中的 class 关键字。智能合约是区块链上的一个程序,它包含了一组规则以及这些规则的自动执行逻辑。一旦部署到区块链上,智能合约在交易触发时按照编写的逻辑自动执行操作。

合约变量定义

    //“王五”,“13598534006”
    mapping(string => string) private nameToPhone;
    // 用于存储所有的名字
    string[] private names; 

上面的代码定义了两个private变量,只能够被合约内部的函数访问。其中一个是map类型的变量,一个是array类型的变量。

合约函数定义

    function addContact(string calldata _name, string calldata _phone) public {
        // 如果是新联系人,则添加到数组中
        if(bytes(nameToPhone[_name]).length == 0) { 
            names.push(_name);
        }
        nameToPhone[_name] = _phone;
    }

    function getContact(string calldata _name) public view returns (string memory) {
        return nameToPhone[_name];
    }

    function getAllContactNames() public view returns (string[] memory) {
        return names;
    }

上面的代码,定义了三个智能合约函数,public 意味着函数可以被智能合约外部访问。

  • addContact 接收两个参数,没有返回值,用于添加通讯录信息;
  • getContact 接收一个参数,返回一个参数,用于查询指定联系人的手机号;
  • getAllContactNames 没有参数,返回一个参数,用于查询通讯录中的所有联系人姓名;

上面的代码中,可以看到参数和返回值有calldatamemory两个关键字,它们是用来指定数据的存储位置和可变性。

calldata是一个不可修改的temporary存储区域。当函数有外部参数时,这些参数是完全存储在calldata区域中。对calldata区域的数据访问不会产生任何副本,因为它只是直接从调用数据中读取。由于calldata区域是不可修改的,所以在函数内部不能修改通过calldata传入的参数。

memory是一个可变的临时存储区域,用于存储可变数据。每次函数调用时,都会为memory分配新的空间。从memory中分配新的对象时会创建对象的一个全新副本。通过值传递方式在函数中修改memory中的变量不会影响外部变量。

编译、部署和测试

上述智能合约的编译、部署和测试均在Remix中进行。Remix是一个强大的开源Web和桌面应用程序,专为以太坊智能合约的开发、测试、部署和调试而设计。它支持Solidity语言,是以太坊开发者社区中广泛使用的一个工具。Remix提供了一个用户友好的界面,使得无论是经验丰富的开发者还是刚入门的新手都能轻松上手。

编译

将代码贴到Remix中之后,点击左侧的编译图标。

年轻人的第一个智能合约,区块链

选择对应版本的编译器,点击编译按钮。

年轻人的第一个智能合约,区块链

部署

编译完成后,点击部署图标。

年轻人的第一个智能合约,区块链

选择部署的环境(Remix虚拟环境)、账户(Remix提供的测试账户),点击部署按钮。部署成功后,左下角即出现部署好的智能合约可以被调用的函数。

年轻人的第一个智能合约,区块链

部署成功后,在控制台可以看到该笔交易的详情(对区块链做的任何修改的操作,实质上都是发起了交易)。其中的input,就是编译后的智能合约的内容。

年轻人的第一个智能合约,区块链

测试

部署完智能合约之后,就可以调用合约的函数来进行测试。

调用addContact函数

年轻人的第一个智能合约,区块链

调用getAllContactNames函数

年轻人的第一个智能合约,区块链

调用getContact函数

年轻人的第一个智能合约,区块链

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-840529.html

到了这里,关于年轻人的第一个智能合约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最新年轻人副业赚钱攻略

    最近几年,随着互联网的快速发展和社会变革的加速,年轻人副业赚钱的需求也越来越大。无论是为了增加收入、提升个人能力还是实现自我价值,年轻人们都纷纷开始寻找副业赚钱的机会。 那么,如何才能在副业赚钱中脱颖而出呢?本文将从几个方面给出一些建议。 第一

    2024年02月12日
    浏览(50)
  • 年轻人存款难题:挑战与努力

    年轻人存款难题:挑战与努力 近日,一项调查显示“大约五分之一的年轻人存款在一万元以内。10万元存款是一个‘坎’,存款超过10万就会超过53.7%的人。”这一调查引发了广泛的关注和讨论,将“年轻人”和“存款”两个词融合在一起。对于年轻人而言,存款难吗?从以下

    2024年02月15日
    浏览(42)
  • 养生的年轻人,自己给自己“治病”

    【潮汐商业评论/原创】 “最近嘴周总长痘,应该是上火了,我这就下单点金银花露喝。”对于长痘这件事,Anna的第一反应就是“内调”。 “针对性护肤和涂药这些方法治标不治本,就算用完痘痘不泛红且瘪了,身体里的问题没解决,过阵子又会长出来。”沉迷养生的Anna认

    2024年02月12日
    浏览(46)
  • 多少年轻人,被赛博美女逼成了AI侦探

    赶紧自查。 不知从什么时候开始,社交媒体平台上的美女账号越来越多了。 她们的一颦一笑都精致到头发丝,有时成为穿着套头卫衣深情望向镜头的纯情女大,有时又变身元气活泼的氧气美人;她们对摄影、音乐、旅行、护肤、养生都有自己的见解,也能说出让屏幕另一端

    2024年02月21日
    浏览(49)
  • 论年轻人拥有的资源和对时间的合理估值

    我们来看这样一件事情,小刘同学要去北大医院看病,坐地铁过去 5 块钱,耗费1个小时;打车过去35块钱,耗费40分钟。于是小刘同学还有科研任务和组会汇报要做,于是选择了打车去医院。 和坐地铁相比,小刘同学选择打车,好处是节省了25分钟的时间,以及路上的舒适;

    2024年02月13日
    浏览(42)
  • AI工程师眼中的未来 | 年轻人如何求职选方向

    一个人的命运不仅要看个人的奋斗 也要看历史的选择 如果能顺应未来的趋势选择对了方向 就能让财富巨增瞬间起飞 但是如果选择错了方向 随着社会的发展 有很多工作的机会会渐渐的消失 而我们自己也会更容易被社会所淘汰 所以未来的趋势是什么 我们应该如何选择不同的

    2024年02月10日
    浏览(59)
  • AIGC+开放式社交,为年轻人注入了新的“Soul”?

    5月21日全国助残日,Soul App举办了一场与众不同的线上公益活动,邀请视障用户担任“见习解忧师”,诉说世界更多角落“不完美”的故事,展示人生更多可能,传递温暖与爱。 参与此次派对的“见习解忧师”都是Soul平台上充满正能量,并且拥有“野生解忧师”经历的用户。

    2024年02月11日
    浏览(40)
  • 我做了10年的测试,由衷的建议年轻人别入这行了...

    两天前,有个做功能测试7年的同事被裁员了。这位老哥已经做到了团队中的骨干了,人又踏实,结果没想到刚刚踏入互联网“老龄化”大关,就被公司给无情优化了。 现在他想找同类型的工作,薪资也一直被压,考虑转行转型的话,上升空间又窄。昨天还在指点江山,今天

    2024年02月12日
    浏览(44)
  • AI大爆发的时代,未来的年轻人怎样获得机会和竞争力?

    AI正迅猛地改变着我们的生活。根据高盛发布的一份报告,AI有可能取代3亿个全职工作岗位,影响全球18%的工作岗位。在欧美,或许四分之一的工作可以用AI完成。另一份Statista的报告预测,仅2023年,AI就将创造230万个工作岗位,同时消除180万个工作岗位。 教育领域不可避免地

    2024年02月05日
    浏览(66)
  • 旅游有哪些好玩的地方? 今天用python分析适合年轻人的旅游攻略

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 “旅”是旅行,外出,即为了实现某一目的而在空间上从甲地到乙地的行进过程; “游”是外出游览、观光、娱乐,即为达到这些目的所作的旅行。 二者合起来即旅游。所以,旅游不但有“行”,且有观光、娱乐含义。 知识点

    2024年02月07日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包