主页 > imtoken钱包下载2.0版本 > 课程回顾 | roysue:第一个智能合约,部署在树莓派上

课程回顾 | roysue:第一个智能合约,部署在树莓派上

imtoken钱包下载2.0版本 2024-01-04 05:07:43

2021年以太坊还能挖多久_16年挖以太坊教程_1080ti挖以太坊

11月30日,在【传统安全X区块链】群直播课程中,看学讲师、看学区块链研究员Roysue为区块链和安全爱好者分享了一场知识盛宴《第一个智能合约》Deploy on the Raspberry Pi,让我们一起复习~

roysue:今天我们来学习第一个智能合约,也就是说前后端的交互是通过智能合约来实现的。 现在让我们实现一个最基本的操作,从 hello world 开始。 (2018/11/30)

16年挖以太坊教程_1080ti挖以太坊_2021年以太坊还能挖多久

我们的第一个智能合约

首先,我们将在以太坊上构建 Greeter,一个 Hello World 智能合约。 它被描述为“一种生活在以太坊上的智能数字资产,可以与任何与之交互的人进行对话”,即你说什么,它也说什么。

在第一部分中,我们描述了如何在 solidity 中编写智能合约。 类似于Java,会被编译成字节码,以太坊的虚拟机会执行这个字节码。 现在让我们安装编译器。 笔记本上也安装了编译器,命令行如下:

$ sudo add-apt-repository ppa:ethereum/ethereum

$ sudo apt-get update

$ sudo apt-get install solc

2021年以太坊还能挖多久_1080ti挖以太坊_16年挖以太坊教程

编译会占用大量的系统资源,在桌面平台上比在树莓派等平台上编译要快很多倍。 这里安装的solc是solidity语言编译器。 solc不仅有一个版本,还有很多分支。 我们在这里安装最原始的版本。 从solidity官网可以看到很多编译器都可以使用。 官方推荐的是Remix,安装步骤有文档说明。

其他版本的安装我们就不演示了,只演示正式版的安装。

solc编译器的安装

首先新建一个文件夹,

```js

mkdir solc

cd sol/

`
``

然后,创建一个新文件

```js

touch Greeter.sol

`
``

用你喜欢的编译器打开 Greeter.sol 文件并写入以下内容。

```js

contract Mortal {

   /* Define variable owner of the type address */

   address owner;



   /* This function is executed at initialization and sets the owner of the contract */

   function Mortal() { owner = msg.sender; }



   /* Function to recover the funds on the contract */

   function kill() { if (msg.sender == owner) selfdestruct(owner); }

}



contract Greeter is Mortal {

   /* Define variable greeting of the type string */

   string greeting;



   /* This runs when the contract is executed */

   function Greeter(string _greeting) public {

       greeting = _greeting;

   }



   /* Main function */

   function greet() constant returns (string) {

       return greeting;

   }

}

2021年以太坊还能挖多久_16年挖以太坊教程_1080ti挖以太坊

编译:

```js

>$ solc -o target --bin --abi Greeter.sol

ABI可以理解为符号。 在 Windows PE 中,符号集成在 Windows 可执行文件中。 在编译器中,符号没有集成到可执行文件中。

1080ti挖以太坊_2021年以太坊还能挖多久_16年挖以太坊教程

这张图是它的demo编译的结果。 尽管有一些注意事项,但仍会生成一个目标文件夹,其中包含四个文件:Greeter 和 Mortal 的 ABI 和 bin 文件。 我们只需要Greeter的这两个文件,因为它集成了Mortal的契约。

接下来就是将Greeter的ABI和bin打包到智能合约中。 可以将所有的命令一句一句的敲进去,这样就可以打包了; 也可以将所有命令保存为脚本,命名为greeter.js,直接加载脚本将ABI和binary打包到智能合约中。 让我们再来一次。

可以看到最终的编译结果是16进制的,并且符号都标注的很清楚。

var greeterFactory = eth.contract([{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}])

var greeterCompiled = "0x" + "608060405234801561001057600080fd5b5060405161039b38038061039b83398101806040528101908080518201929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060019080519060200190610089929190610090565b5050610135565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100d157805160ff19168380011785556100ff565b828001600101855582156100ff579182015b828111156100fe5782518255916020019190600101906100e3565b5b50905061010c9190610110565b5090565b61013291905b8082111561012e576000816000905550600101610116565b5090565b90565b610257806101446000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806341c0e1b514610051578063cfae321714610068575b600080fd5b34801561005d57600080fd5b506100666100f8565b005b34801561007457600080fd5b5061007d610189565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100bd5780820151818401526020810190506100a2565b50505050905090810190601f1680156100ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610187576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102215780601f106101f657610100808354040283529160200191610221565b820191906000526020600020905b81548152906001019060200180831161020457829003601f168201915b50505050509050905600a165627a7a72305820467ac32dfa208b06ba97f3a7f72d039f2f912938b54b9881c603d80f6b004df40029"

var _greeting = "Hello DesignSpark!"

var greeter = greeterFactory.new(_greeting,{from:eth.accounts[0],data:greeterCompiled,gas:1000000}, function(e, contract){

   if(e) {

     console.error(e); // If something goes wrong, at least we'll know.

     return;

   }



   if(!contract.address) {

     console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");



   } else {

     console.log("Contract mined! Address: " + contract.address);

     console.log(contract);

   }

})

var _greeting 可以定义你想说什么,greeterFactory 可以定义你的新实例16年挖以太坊教程,gas 是消耗单位,我们默认的账户实例要加载到区块链上。

console.error(e) 是打印的错误。 如果合约执行成功,我们会打印一条日志,表示合约已经执行,hash加载成功。 释放哈希,哈希将在矿工附近等待。 如果合约部署失败,或者合约被挖矿,合约地址将被暴露。

var greeterFactory = eth.contract()

var greeterCompiled = "0x" + ""

`ABI`是一个接口,可以理解为一个符号,而`bin`是纯粹的二进制。 所以接下来的编译部分是符号化的,部分是纯二进制的。

查看版本信息

solc --version

0.4.24版本的信息还是比较重要的,先完成实验吧。

安装一个可以读取目录的工具:

sudo apt install tree

2021年以太坊还能挖多久_1080ti挖以太坊_16年挖以太坊教程

接下来,如果我们确保在合适的节点上运行矿工,则解锁我们希望部署的联系人的计算机帐户。 在我们的例子中16年挖以太坊教程,我们在笔记本电脑的 geth 控制台上再次执行了 miner.start() 并决定通过 Raspberry Pi 部署合约。

所以我们在 Raspberry Pi 上输入:

> personal.unlockAccount(eth.coinbase, "")

>
loadScript("greeter.js")

2021年以太坊还能挖多久_16年挖以太坊教程_1080ti挖以太坊

成功! 在同步消息中,我们可以看到正在发送合约消息,等待挖矿通知,然后是挖矿完成通知。

我们可以通过以下方式验证这一点:

> eth.getCode(greeter.address)

16年挖以太坊教程_1080ti挖以太坊_2021年以太坊还能挖多久

我们在树莓派上查看账户余额,发现略有下降。

2021年以太坊还能挖多久_16年挖以太坊教程_1080ti挖以太坊

资金将转到相应的矿工,在我们的例子中,是笔记本电脑上的帐户。

最后,我们可以执行合约:

> greeter.greet();

1080ti挖以太坊_16年挖以太坊教程_2021年以太坊还能挖多久

正如 Ethereum 网站上所述,这会立即返回,因为调用不会更改区块链上的任何内容并且没有 gas 成本。

在这种情况下,如果笔记本正在挖矿,加载合约,先将数据传输到树莓派,在树莓派上部署内容,然后在树莓派上输入命令。 运行节点信息,先解锁账号,加载一次greeter.js,加载后立马可以看到。

> personal.unlockAccount(eth.coinbase, "")

> loadScript("greeter.js")

16年挖以太坊教程_2021年以太坊还能挖多久_1080ti挖以太坊

挖矿时,同步信息会显示在节点上。

先挖矿吧

miner.start()

检查挖矿速度,

htop

您可以在合约地址上看到内容。

因为我们需要 gas 来部署智能合约。 我们可以执行合约:

> greeter.greet();

合约查询不会消耗wei。 如果涉及合约存储和缓存,会消耗wei。 所以我们可以在网上查询区块的信息,不会涉及到wei的消耗。

文末会有总结。 其实这个合约就是一个官方教程。 由于它不对区块链进行任何更改,因此不消耗气体。 最后我们可以研究文档和调试。

文档和调试

它的建议是,以太坊发展很快,任何合约都可能在诞生不久就过时,各种官网和wiki也会过时,即使是比较权威的人写的文章也会过时。 一个典型的例子是官网的一个2017的例子已经不再维护,被认为是过时的。

以太坊运行速度很快,各种改进将提高其稳定性和效率。 如果有问题,请检查您自己的文档是否已过时,以及以太坊的版本是否与文档匹配。 在测试链上,使用旧版本无所谓,但旧版本可能不适用于主网。

如果要删除刚刚做的所有实验,执行以下命令删除所有文件夹。

```js

$ geth removedb --datadir .designspark

`
``

重新创建一个文件夹,重新创建一个进程,就可以开始做自己的私有链了,重新创建一个创世块。

最后,让我们总结一下我们做了什么。

1. 理论上,树莓派运行智能合约,树莓派参与私有链。 即使树莓派参与私有链,采用轻同步模式,参与主网也没有问题。

2、私链是如何搭建的。

3.私链在两个账户之间转账,编译智能合约,在树莓派上应用智能合约,调用函数。

如果我们现在开始,我们可以加入更多的节点,运行更复杂的智能合约,做更复杂的事情。 我们这节课的任务就完成了。

后面我们会介绍智能合约的编写到部署,根据需求开发智能合约,最后讲智能合约的安全开发。

问题和答案

接下来,让我们一起来看看上期课程的精彩问答吧~!

16年挖以太坊教程_1080ti挖以太坊_2021年以太坊还能挖多久

学生:桌面是用solc还是remix编译合约程序?

r0ysue:Remix 在云端,不在桌面。 这只是一个网页,实际上我认为它是随机的。 它是这样写的:

1080ti挖以太坊_16年挖以太坊教程_2021年以太坊还能挖多久

然后编译,$solc -o target --bin --abi Greeter.sol:

16年挖以太坊教程_1080ti挖以太坊_2021年以太坊还能挖多久

学生:用solc编译后,应该是中间代码吧? 感觉你在部署一个交叉编译环境...

r0ysue:这张图是它demo编译的结果。 你知道什么是“交叉编译环境”吗? 交叉编译环境是指在x86机器上编译arm指令的代码。 换句话说,我们在 x86 机器上编译在 EVM 虚拟机中运行的字节码。 编译后就是EVM虚拟机的字节码。 在这一点上,remix 和 solc 的功能是一样的。 虽然有一些注意事项,但会生成一个目标文件架。 包含四个文件夹:Greeter 和 Mortal 的 ABI 和 bin 文件。

学生:你以后不打算用在树莓派上吗? 你的机器是x86系统,树莓派是arm系统。 你需要一个交叉编译环境来移植它。

r0ysue:编译完成后,就是EVM的字节码。 这个字节码可以在EVM的虚拟机中运行,而不是直接在arm上运行,不需要arm的机器码。

……

16年挖以太坊教程_2021年以太坊还能挖多久_1080ti挖以太坊

本教程视频已上传至看学学院【传统证券X区块链】专栏

()

2021年以太坊还能挖多久_1080ti挖以太坊_16年挖以太坊教程

我们邀请您参加下一次活动~

【传统证券X区块链】下期活动来啦~!

讲座时间为2018年12月8日19:00-20:00~

讲师:看雪讲师,看雪区块链团队成员,xrosherat,上海交通大学密码学实验室成员。

扫描下方海报二维码添加看学人员,进群免费学习~!

2021年以太坊还能挖多久_1080ti挖以太坊_16年挖以太坊教程

16年挖以太坊教程_1080ti挖以太坊_2021年以太坊还能挖多久

- 结尾 -

往期热点新闻:

2021年以太坊还能挖多久_16年挖以太坊教程_1080ti挖以太坊

公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com