框架官网

https://www.trufflesuite.com/docs/truffle/getting-started/compiling-contracts

在vscode中【查看-终端】终端输入编译

编译代码

pragma solidity >=0.4.22 <0.8.0;contract Adoption {address[16] public adopters;function adopt(uint petId) public returns (uint) {require(petId>=0 && petId <=15);adopters[petId] = msg.sender;return petId;}function getAdopters() public view returns (address[16]) {return adopters;}
}
truffle compile

编译遇到问题

1.没有运行脚本权限解决办法

https://blog.csdn.net/weixin_42288182/article/details/106896534

2.Compilation failed. See above.

CompileError: /E/pet_shop/contracts/Adoption.sol:12:49: TypeError: Data location must be "memory" for return parameter in function, but none was given.
    function getAdopters() public view returns (address[16]) {
                                                ^---------^

应该是我用的最新编译器,教程中代码是0.4.22的,solidity0.5要求写数据存储位置

所有的复杂类型如数组(arrays)和数据结构(struct)有一个额外的属性:数据的存储位置(data location)。可为memorystorage

根据上下文的不同,大多数时候数据位置有默认值,也通过指定关键字storage和memory修改它。

函数参数(包含返回的参数)默认是memory
局部复杂类型变量(local variables)和 状态变量(state variables) 默认是storage

局部变量:局部作用域(越过作用域即不可被访问,等待被回收)的变量,如函数内的变量。状态变量:合约内声明的公有变量

总结

强制的数据位置(Forced data location)

  • 外部函数的参数(不包括返回参数)强制为:calldata
  • 状态变量(State variables)强制为: storage

默认数据位置(Default data location)

  • 函数参数及返回参数:memory
  • 复杂类型的局部变量:storage

附自己外部函数(External function)总结:

方式=内部+消息调用

内部=当前合约+继承合约

消息调用=this+c.g()

public为方式

private为方式->内部->当前合约

external为方式->消息调用

internal为方式->内部

选自我购买教程老师的csdn,它写的一个教程

Solidity 教程系列4 - 数据存储位置分析https://blog.csdn.net/xilibi2003/article/details/78868501

function getAdopters() public view returns (address[16] memory){}  写上数据存储位置就对了

pragma solidity >=0.4.22 <0.8.0;contract Adoption {address[16] public adopters;function adopt(uint petId) public returns (uint) {require(petId>=0 && petId <=15);adopters[petId] = msg.sender;return petId;}function getAdopters() public view returns (address[16] memory) {return adopters;}
}

成功以后,打开build,有adoption.json

里面有abi,

ABI

编辑词条

应用程序二进制接口描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。

搜狗百科https://baike.sogou.com/v64965285.htm?fromTitle=ABI

区块链13-区块链去中心化应用开发6-DAPP实战-宠物领养合约编写相关推荐

  1. 程序员如何切入区块链去中心化应用开发

    前段时间一个以太坊游戏应用:Fomo3D异常火爆,在短短的几天内就吸引了几万的以太币投入游戏,第一轮游戏一个"黑客"用了一个非常巧妙的利用以太坊规则成为了最终赢家,拿走了1万多以太 ...

  2. 完全免费的基于区块链和 IPFS 的去中心化博客平台

    一.前言 xLog是一个基于Crossbell区块链的博客解决方案,专注于Web3数据由用户掌控.Crossbell是一个基于Web3技术的去中心化博客平台,用户可以在该平台上发布文章并进行交流和创作 ...

  3. 基于IPFS去中心化相册以太坊Dapp

    Dapp-IPFS-Image 基于IPFS去中心化相册以太坊Dapp 注意: 使用该 github 克隆到本地, 需要 执行 $ npm install 安装依赖 node_modules 安装IP ...

  4. 区块链技术特点之去中心化特性

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! 由于区块链技术去中心化的特性,其在我们生活中的很多重要领域(如金融.管理)等方面具有重要的意义.例如,我们可以通过在 ...

  5. 用区块链改变人工智能:去中心化带来数据新范式

    近年,从围棋到人类水平的语音识别,人工智能(AI)研究者终于在他们几十年一直努力探索的领域取得了突破.取得突破进展的关键一点是研究者们可以收集巨量的数据并「学习」这些数据,从而将错误率降低到可接受范围 ...

  6. 谁说江西没有区块链;BM:去中心化搜索引擎的时代到来了 | 一分钟链圈

    Hi,艾瑞巴蒂 这里是7月1日的「1分钟链圈」,只需1分钟,看尽全球最热.最新的区块链新闻. 行业 江西软件职业技术大学成立区块链学院 数据显示:上半年活跃Dapp中数量最多的为抽奖类和高风险类 G2 ...

  7. 什么是“中心化”和“去中心化”?区块链是怎么实现去中心化的?

    图1 三类网络拓扑结构 所谓"中心化"和"去中心化",最早是用来刻画网络拓扑结构的术语.1964年,美国兰德公司发布了一份关于分布式通信的报告,提出了三种网络结 ...

  8. 区块链 分布式账本和 去中心化网络

    去中心化网络 我们的资产(比特币),是分布式的存储在网络节点种的,也成为分布式账本 承载分布式账本的网络就叫去中心化网络 分布式账本 中心化在线支付系统,是在一台服务器上分别开设 account/pw ...

  9. 以太坊去中心化_开发以太坊去中心化投票应用程序的指南

    以太坊去中心化 by Timothy Ko 蒂莫西·高(Timothy Ko) 开发以太坊去中心化投票应用程序的指南 (A guide to developing an Ethereum decent ...

最新文章

  1. Go(GoLang)解决 cannot find package/golang.org/问题 Grpc+ProtoBuf所需的一些资源
  2. 【XML DOM】解析XML Dom
  3. jQuery源码解析之position()
  4. Websocket——原理及基本属性和方法
  5. 双击硬盘盘符打不开文件的处理方法
  6. 开源加密库和 GnuPG 模块 Libgcrypt 紧急修复严重漏洞
  7. 给定奇数、横、竖、斜、总和相等python_第四章练习
  8. linux同步Internet时间
  9. 百度浏览器内核太低,浏览京东有问题
  10. 达摩院发布AI Earth地球科学云平台
  11. 使用自己的服务器中转远程桌面
  12. rose 生产java代码m_rose 生成代码
  13. 大数据系列cdh版本下载
  14. 无需证书微信小程序实现人脸识别—E证通
  15. easyui主界面布局easyui-layout用法一例
  16. 判断输入的年份是不是闰年
  17. 计算机常用芯片,笔记本电脑常用芯片大全
  18. MySQL数据库day01
  19. 对象引用、可变性和垃圾回收
  20. MySQL数据库事务基本介绍、四大特征、隔离界别的使用方法

热门文章

  1. linux系统下扩容vg大小
  2. cfiledialog(cfiledialog头文件)
  3. 什么是函数式编程,函数合并与柯里化又是什么意思?
  4. 电子学:第006课——电路中的一些基础知识
  5. 模拟退火算法解决工作指派问题(c++代码实现)
  6. 量化投资学习-13:一张图残酷的展现了庄家、量化交易者、散户的盈利空间的对比
  7. 2011年4季度英巴卡迪诺网络技术研讨会列表
  8. background-color和border-color设置颜色相同,渲染出来不一致
  9. 战胜柯洁李世石的AlphaGo以 0:100 败给了AlphaGo Zero
  10. 海豚浏览器 2013校园招聘 笔试