MoonBeamSolidity开发工具以及对应使用示例
Posted Keike1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MoonBeamSolidity开发工具以及对应使用示例相关的知识,希望对你有一定的参考价值。
本文将介绍Solidity开发中的两种工具:Remix IDE和Hardhat
Remix
- Solidity在线编译器
- 无需安装可快速开发、部署和测试Solidity智能合约
- 支持插件,包括OpenZeppelin,Oraclize和Solium等
- 可以本地安装,使用命令行操作,完全开源
Remix部署ERC-721合约
进入Remix,创建OpenZeppelinERC721.sol
插入以下代码
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/OpenZeppelin-contracts/blob/master/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol";
修改要部署的合约,注意必须部署主合约。若选择部署接口合约系统会报错。
点击部署,确认交易,合约部署成功后即可对已部署的合约进行交互
当成功调用mint
函数时,成功铸造一个NFT,此时totalSupply
字段由0变为1
Chainlink预言机的介绍及其喂价演示
什么是预言机
- 是一种抽象电脑,用来回答决定性问题
- 区块链预言机是为链上智能合约提供链下信息的服务
- 为区块链网络提供直接获取链外的信息的途径
Chainlink
- 去中心化区块链预言机协议
- 最初基于Ethereum,现在已经有12+条L1和L2链有原生部署
- 最主要的应用场景之一是为各类DeFi智能合约提供喂价
智能合约喂价基本原理
- 预言机节点向Aggregator合约发布价格数据,并获得奖励
- Aggregator合约从预言机网络定期接受最新数据更新,并将数据聚合并存储上链
- 终端用户通过Aggregator接口或通过代理合约的Consumer接口使用只读操作检索喂价
Remix演示
创建AggregatorInterface.sol,写入一下代码
pragma solidity ^0.8.0;
interface AggregatorV3Interface
/**
* Returns the decimals to offset on the getLatestPrice call
*/
function decimals() external view returns (uint8);
/**
* Returns the description of the underlying price feed aggregator
*/
function description() external view returns (string memory);
/**
* Returns the version number representing the type of aggregator the proxy points to
*/
function version() external view returns (uint256);
/**
* Returns price data about a specific round
*/
function getRoundData(uint80 _roundId) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
/**
* Returns price data from the latest round
*/
function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
以下是喂价地址
#Moonbase Alpha
BTC to USD
0xCf88A8d7fc1A687895fC8ffAad567f303926B094
ETH to USD
0x3669da30c33D27A6A579548fCfc345fE5dEdda6e
DOT to USD
0xA873F6b30aD79fCAF9b03A0A883d6D1f18D661d7
KSM to USD
0x0C515E77897b2A7181C875c88FaF9BC8E5661E3b
AAVE to USD
0x64B22D2B8c3CA311a0C2de34bf799f8101c89362
ALGO to USD
0x9fc3b0BF1156868085AFC1cFf4Bf6D85ea301371
BAND to USD
0xC5aeD933FEb49794A8Bf2FB0e73D9c958c8a07ba
LINK to USD
0x446b93236B4d34642732B8dcbeB3cb4f4FA03C70
SUSHI to USD
0x4a6Cf10C0f5c4D4e7cf7385bFfecDAec0778357C
UNI to USD
0x326997c21451DaB916F9f01684991B6169dAf3E5
如图,decimals为小数点在answer的位数,即20605.82224916
因此,使用Chainlink预言机可以实时获取链下数据实现链上链下协同。
HardHat
- 是一个编译,部署和测试Solidity智能合约和应用的开发环境
- 自带一个本地EVM虚拟机运行环境 - Hardhat Network,类似于Ganache
- 可以自定义任务来简化开发工作流程
- 基于javascript,也支持TypeScript
- 支持各种插件,包括Etherscan插件,Waffle插件,Ganache插件等等
安装Hardhat
# 安装和初始化命令
# 创建目录
mkdir hardhat && cd hardhat
# 初始化Node.js项目
npm init -y
# 安装Hardhat
npm install hardhat
# 创建项目
npx hardhat
# 安装ethers插件
npm install @nomiclabs/hardhat-ethers ethers
# 安装OpenZeppelin依赖
npm install @openzeppelin/contracts
## 发现安装进程卡住不动,可以配置npm代理(设置淘宝镜像)来提高下载速度
npm config set registry https://registry.npm.taobao.org
Hardhat部署和交互ERC-20合约
## 部署合约
# 编译合约
npx hardhat compile
# 部署合约
npx hardhat run --network moonbase scripts/deploy.js
## 交互合约
# 开启Hardhat Console
npx hardhat console --network moonbase
# 获得合约ABI示例
const MyToken = await ethers.getContractFactory('MyToken');
# 关联到之前部署的合约地址
const mytoken = await MyToken.attach('your-deployed-contract-address');
console.log(mytoken)
await mytoken.name()
await mytoken.totalSupply()
# 查询余额
await mytoken.balanceOf("the-deployer-wallet-address")
# 转账
await mytoken.transfer("recipient-wallet-address", 1000000)
# 查询余额
await mytoken.balanceOf("the-recipient-wallet-address")
在Moonbase α的testnet上也能查询到相关Transaction Details
Remin IDE vs. Hardhat
Hardhat | Remix IDE | |
---|---|---|
运行模式 | 本线命令行/CLI | 线上/浏览器 |
可纳入其他项目依赖 | Y | N |
包含编辑器 | N | Y |
支持任务和自动化流程 | Y | N |
支持单元测试 | 通过Waffle插件 | 有限 |
cuda 8.0对应啥cudnn版本
ubuntu14.04 64位的cudnn6.0版本。
CUDA
(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员现在可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN
应用范围
计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展。为打造这一全新的计算典范,NVIDIA™(英伟达™)发明了CUDA(Compute Unified Device Architecture,统一计算设备架构)这一编程模型,是想在应用程序中充分利用CPU和GPU各自的优点。现在,该架构已应用于GeForce™(精视™)、ION™(翼扬™)、Quadro以及Tesla GPU(图形处理器)上,对应用程序开发人员来说,这是一个巨大的市场。
CPU与GPU并用的“协同处理”
在消费级市场上,几乎每一款重要的消费级视频应用程序都已经使用CUDA加速或很快将会利用CUDA来加速,其中不乏Elemental Technologies公司、MotionDSP公司以及LoiLo公司的产品。
GPU架构
在科研界,CUDA一直受到热捧。例如,CUDA现已能够对AMBER进行加速。AMBER是一款分子动力学模拟程序,全世界在学术界与制药企业中有超过60,000名研究人员使用该程序来加速新药的探索工作。
在金融市场,Numerix以及CompatibL针对一款全新的对手风险应用程序发布了CUDA支持并取得了18倍速度提升。Numerix为近400家金融机构所广泛使用。
CUDA的广泛应用造就了GPU计算专用Tesla GPU的崛起。全球财富五百强企业现在已经安装了700多个GPU集群,这些企业涉及各个领域,例如能源领域的斯伦贝谢与雪佛龙以及银行业的法国巴黎银行。
随着微软Windows 7与苹果Snow Leopard操作系统的问世,GPU计算必将成为主流。在这些全新的操作系统中,GPU将不仅仅是图形处理器,它还将成为所有应用程序均可使用的通用并行处理器。
参考技术A NVIDIA CuDNN 安装说明CuDNN是专门针对Deep Learning框架设计的一套GPU计算加速方案,目前支持的DL库包括Caffe,ConvNet, Torch7等。
CuDNN可以在官网获得,注册帐号后即可下载。官网没有找到安装说明,下载得到的压缩包内也没有Readme. 不过google一下就会找到许多说明。基本原理是把lib文件加入到系统能找到的lib文件夹里, 把头文件加到系统能找到的include文件夹里就可以。这里把他们加到CUDA的文件夹下(参考这里)
tar -xzvf cudnn-6.5-linux-R1.tgz
cd cudnn-6.5-linux-R1
sudo cp lib* /usr/local/cuda/lib64/
sudo cp cudnn.h /usr/local/cuda/include/
执行后发现还是找不到库, 报错
error while loading shared libraries: libcudnn.so.6.5: cannot open shared object file: No such file or directory
而lib文件夹是在系统路径里的,用ls -al发现是文件权限的问题,因此用下述命令先删除软连接
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.6.5
然后修改文件权限,并创建新的软连接
sudo chmod u=rwx,g=rx,o=rx libcudnn.so.6.5.18
sudo ln -s libcudnn.so.6.5.18 libcudnn.so.6.5
sudo ln -s libcudnn.so.6.5 libcudnn.so
回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !
以上是关于MoonBeamSolidity开发工具以及对应使用示例的主要内容,如果未能解决你的问题,请参考以下文章
安装apached源码包以及编写shell脚本使其启动更加方便,并且和启动系统服务相同