EOS的基础知识(三)合约介绍

本篇主要涉及的内容有:

1、前置概念介绍;

2、土味智能合约入门:hello;

3、调用hello合约。

1、前置概念介绍

1.1  什么是WebAssembly

之前如果大家简单地浏览过eos项目文件夹,就会看到很多`.wasm`文件,而wasm就是WebASseMbly的缩写。这里让我们略过Flash、JavaScript和WebAssembly的爱恨情仇(发展演化),直接一句话概括一下:‘WebAssembly’是一种新的编码方式,可以在现代的网络浏览器中运行。

想象它是一种可以把底层语言文件变得像JS那样,可以直接在浏览器中运行。而且比JS更轻量、更快速、更安全。过程如下图:

 

 

还有一个大家在`build` eos的过程中看过一百遍的词:`LLVM`。

LLVM是一些分模块、可重用的编译工具链。它提供了一种代码编写良好的中间表示(IR)。它在上图中的位置大概是介于第一步和第二步之间。如果想把C/C++变成WASM文件,就需要先把C/C++代码先变成LLVM中间代码。一旦变换成了LLVM IR之后,就说明LLVM已经理解了代码并会对代码自动地做出一些优化。而WebAssembly也并不是只有`wasm`一种格式,它还有`wast`格式。这两者作用是等价的,最大的区别就是`wast`是可读文本格式的,而`wasm`是二进制格式的,他们可以通过工具相互转换。

让我们高度总结一下WebAssembly:可以让浏览器识别底层语言的神器。(笔者感觉和以太坊中的编译器作用差不多)。

 

1.2  什么是ABI

玩过以太坊的同学可能对ABI并不陌生,在EOS中ABI的作用也和以太坊中大致类似:

它定义了函数被调用的规则;定义了参数在调用者和被调用者之间是如何传递的。如果说`wasm`文件是产品的话,要想顺利使用这件产品,你还需要一本操作说明书,而`ABI`就是这份说明书。

2、土味智能合约入门:hello

一说入门就要说<hello world>,这种感觉很low,同时也很“程序员”。感谢雷佳音让我找到了一个并不尴尬的小标题:土味hello。

2.0   准备工作

进度保持在我们上一篇结束的地方:我们已经学会使用操作eosio账户、创建了新账户`testeosio`。在正文开始之前,请启动`nodeos`,相关钱包处于unlock状态。


2.1  修改`config.ini`

找到位于vim ~/Library/Application\Support/eosio/nodeos/config/中的`config.ini`文件,打开找到下面这句话:

# print contract's output to console (eosio::chain_plugin)
contracts-console = false

把上面的`false`改成`true`,保存修改退出。这样我们就可以在终端直接看到智能合约的执行情况。(这里笔者重新启动了nodeos)

2.2  创建`hello`合约

这里我们用到了一个小工具叫`eosiocpp`。eosiocpp是一个c++生成wasm和ABI文件的工具。eos项目中自带了一个hello合约,为了区分,这里我们创建一个合约叫做`hello1`。执行以下语句创建新合约:

eosiocpp -n hello1

它会以样例合约为基础创建一个最简单的合约。看到下面即表示创建成功:

这时在当前文件夹下就可以看到有一个`hello1`的文件夹。进入`hello1`文件夹,可以看到里面有两个文件:

➜  hello1 git:(master) ✗ ls
hello1.cpp hello1.hpp

  • `hello1.hpp`是智能合约的头文件,可以包含一些变量,常量和函数的声明。

  • `hello1.cpp`是合约的源码文件,包含合约的具体实现。

2.3  生成wasm和abi文件

进入`hello1`文件夹下执行以下命令:

#使用 -o 生成wast文件和wasm文件
eosiocpp -o ./hello1.wast ./hello1.cpp

#使用 -g 生成abi文件
eosiocpp -g ./hello1.abi ./hello1.cpp

这时可以看到在当前文件夹下生成了`hello1.wast`、`hello1.wasm`和`hello1.abi`文件。

2.4  部署智能合约

使用我们刚刚生成的文件部署智能合约。输入如下命令:

cleos set contract eosio ./ ./hello1.wast hello1.abi -p eosio@active

这行命令有五个参数:`eosio`表示部署合约的账户,`./`表示合约所在的文件夹,后面两个参数依次是`.wast`和`.abi`文件的路径,最后的`-p eosio@active`表示权限。执行成功如下图所示:

3、调用hello合约

在执行调用命令之前,我们先简单地了解EOS中的一个概念:`transaction`和`action`。

Action表示单个操作。而transaction是一个或多个action的集合。Action是合约和账户之间进行通信的方式。Action可以单独执行,或者组合组合起来作为一个整体执行。

在官网中我们也可以看到包含一个action和多个action的transaction的例子。对比来看的话,EOS中的action就相当于以太坊中的transaction。执行以下命令来调用hello1合约中的`hi`方法:(执行的账户是testeosio)

cleos push action eosio hi '["hammer"]' -p testeosio

执行成功就可以看到如下界面:

这时如果我们去看运行`nodeos`的终端窗口,可以看到下面的提示:

 

 

同样打印出了`Hello, hammer`

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
EOS platform在使用EOS Studio时遇到了数据库连接问题。由于EOS Platform 7.6标准产品发布时未基于openGauss数据库做过适配,且openGauss要求JDK版本为V1.8,而EOS Studio默认支持的JDK版本为V1.6,因此,在EOS Platform 7.6 Studio的数据库视图中连接openGauss会失败并报错:ORA-28040:没有匹配的验证协议。\[1\]为了解决这个问题,可以提前准备数据库,普华推荐使用企业版的Oracle数据库,但是由于教学使用的通常是MySQL,同样可以实现功能,所以可以以MySQL为例来探索EOS Studio的功能。\[2\]另外,由于EOS Platform 7.6标准产品发布时未基于openGauss数据库做过适配,因此在governor-》配置-》数据库初始化和governor-》配置-》数据源“数据库类型”中无匹配的openGauss类型。但是可以使用EOS Platform 7.6 server来支持openGauss数据库。\[3\] #### 引用[.reference_title] - *1* *3* [普元 EOS Platform 7.6 支持 openGauss2.0数据库方案](https://blog.csdn.net/py_doc/article/details/126584208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [EOS platform普华入门教程](https://blog.csdn.net/zsk1996888/article/details/110395698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

akai9898

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值