主页 > 下载imtoken钱包地址 > 区块链技术(二):以太坊编程语言Solidity安装及初步体验

区块链技术(二):以太坊编程语言Solidity安装及初步体验

下载imtoken钱包地址 2023-03-22 06:11:51

安装

如果你想测试一个简单的 Solidity 合约,你不需要安装任何东西以太坊智能合约的编程语言,只需访问基于浏览器的 Solidity:

1.1通过npm/node.js命令在线安装

npm install solc

如何使用nodejs包的详细信息可以在代码库中找到:#nodejs-usage%E3%80% 82

1.2二进制安装包

包含 Mix IDE 的二进制 Solidity 安装包可以从以太坊网站的 C++ 包中下载:%E3%80%82

1.3 从源代码构建

在 MacOS X、Ubuntu 和其他类 Unix 系统上构建和安装 Solidity 非常相似。本指南首先解释如何为每个平台安装相关依赖项,然后构建 Solidity。

1.4 MacOS X

系统要求:

安装自制软件:

  brew update    
 brew install boost --c++11             # 需要等待一段时间    
 brew install cmake cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp     # 仅仅安装Mix IDE和Alethzero    
 brew install xz d-bus    
 brew install llvm --HEAD --with-clang    
 brew install qt5 --with-d-bus          # 避免长时间的等待没有提示,可以添加 —verbose 输出信息。

安装:xcode

xcode-select —install 

1.5 Ubuntu系统

下面的 Ubuntu 系统是最新版的 Ubuntu 系统编译和安装 Solidity 指南。最受支持的平台是 2014 年 11 月发布的 64 位 Ubuntu 14.04

安装依赖:从源码编译之前,需要准备一些工具和依赖。首先,升级你的代码库。并非所有软件包都在主要的 Ubuntu 存储库中可用,您需要从 Ethereum PPA 和 LLVM 获取它们。注意

Ubuntu 14.04位用户需要使用:

sudo apt-add-repository ppa:george-edison55/cmake-3.x 

获取最新版本的 cmake。

现在添加其他包:

  sudo apt-get -y update    
 sudo apt-get -y install language-pack-en-base    
 sudo dpkg-reconfigure locales    
 sudo apt-get -y install software-properties-common    
 sudo add-apt-repository -y ppa:ethereum/ethereum    
 sudo add-apt-repository -y ppa:ethereum/ethereum-dev    
 sudo apt-get -y update    
 sudo apt-get -y upgrade

对于 Ubbuntu 15.04 (Vivid Vervet) 或更早版本,使用以下命令获取开发相关包:

sudo apt-get -y install build-essential git cmake libboost-all-dev libgmp-dev libleveldb-dev libminiupnpc-dev libreadline-dev libncurses5-dev libcurl4-openssl-dev libcryptopp-dev libjson-rpc-cpp-dev libmicrohttpd-dev libjsoncpp-dev libedit-dev libz-dev

对于 Ubbuntu 15.10 (Wily Werewolf) 或更高版本,使用以下命令获取开发相关包:

sudo apt-get -y install build-essential git cmake libboost-all-dev libgmp-dev libleveldb-dev libminiupnpc-dev libreadline-dev libncurses5-dev libcurl4-openssl-dev libcryptopp-dev libjsonrpccpp-dev libmicrohttpd-dev libjsoncpp-dev libedit-dev libz-dev

不同版本使用不同get命令的原因是libjsonrpccpp-dev已经在Ubuntu通用代码库中15.10之后。

1.6 编译

如果您只打算安装solidity,请忽略Alethzero 和Mix 末尾的错误。

  git clone --recursive https://github.com/ethereum/webthree-umbrella.git
 cd webthree-umbrella
 ./webthree-helpers/scripts/ethupdate.sh --no-push --simple-pull --project solidity # 更新Solidity库
 ./webthree-helpers/scripts/ethbuild.sh --no-git --project solidity --all --cores 4 -DEVMJIT=0 # 编译Solidity及其它
 # 在OS X系统加上DEVMJIT将不能编译,在Linux系统上则没问题

如果您选择安装 Alethzero 和 Mix:

  git clone --recursive https://github.com/ethereum/webthree-umbrella.git
 cd webthree-umbrella && mkdir -p build && cd build
 cmake ..

好的,正常 然后都安装好了。

初学者体验

2.1 一个简单的智能合约

从一个非常基本的例子开始

contract ZhaoxiStorage {

   uint storedData;

   function set(uint x) {
       storedData = x;
   }

   function get() constant returns (uint retVal) {
       return storedData;
   }
}

在 Solidity 中以太坊智能合约的编程语言,合约由一组代码(合约的函数)和数据(合约的状态)组成。合约位于以太坊区块链上的一个地址。

uint 存储数据;这行代码声明了一个名为storedData 的无符号整数uint 类型的状态变量。可以看成是数据库中的一条记录,可以通过调用函数进行查询和修改。在以太坊中,通常只有合约的所有者才能做到这一点。在本例中,set 和 get 函数分别用于修改和查询变量的值。

与许多其他语言一样,您无需添加此项。访问状态变量的前缀。

任何人都可以调用 set 方法来设置与您发布的号码不同的号码。但你的数字将留在区块链的历史中。稍后我们将学习如何增加访问限制。

2.2 加密货币列表

下一个合约将以最简单的形式实现加密货币。通过此代码,任何人都可以在不注册用户名和密码的情况下向他人发送货币,只要他们拥有一对以太坊公钥和私钥。

contract ZhaoxiCoin {

   // 关键字“public”使变量能从合约外部访问。
   address public minter;
   mapping (address => uint) public balances;

   // 事件让轻客户端能高效的对变化做出反应。
   event Sent(address from, address to, uint amount);

   // 这个构造函数的代码仅仅只在合约创建的时候被运行。
   function ZhaoxiCoin() {
       minter = msg.sender;
   }

   // 合约创建者可以调用mint
   function mint(address receiver, uint amount) {
       if (msg.sender != minter) return;
       balances[receiver] += amount;
   }

   // send可以被拥有代币的任何人调用
   function send(address receiver, uint amount) {
       if (balances[msg.sender] < amount) return;
       balances[msg.sender] -= amount;
       balances[receiver] += amount;
       Sent(msg.sender, receiver, amount);
   }
}

address public minter 这行代码声明了一个可公开访问的地址类型的状态变量。地址类型的值大小为 160 位,适用于存储合约地址或他人的公私钥。 public 关键字自动为其修改的状态变量生成访问函数。没有 public 关键字的变量将无法被其他合约访问。此外,只能编写该合约中的代码。自动生成的函数如下:

function minter() returns (address) { return minter; }

下一行代码映射(地址=> uint)公共余额;创建一个公共状态变量,但它的类型更复杂。此类型将某个地址映射到无符号整数。映射可以被认为是一个哈希表,其中每个可能的键对应的值实际上被初始化为全 0。对于映射,不可能获得包含其所有键或值的链表。所以我们必须记住要添加到映射中的内容。在这个例子中,public关键字生成的访问函数会比较复杂,其代码大致如下:

function balances(address _account) returns (uint balance) {
   return balances[_account];
}

event Sent(address from, address to, uint value) 这行代码声明了一个“事件”。由 send 函数中的最后一行代码触发。客户端可以监听区块链触发的这些事件。当事件触发时,监听器会同时接收到 from、to、value 参数,可以很方便的用来追踪交易。要监听此事件,可以使用以下代码:

ZhaoxiCoin.Sent().watch({}, '', function(error, result) {
   if (!error) {
       console.log("ZhaoxiCoin transfer: " + result.args.amount +
           " coins were sent from " + result.args.from +
           " to " + result.args.to + ".");
       console.log("Balances now:\n" +
           "Sender: " + ZhaoxiCoin.balances.call(result.args.from) +
           "Receiver: " + ZhaoxiCoin.balances.call(result.args.to));
   }
}

兆熙币有一个特殊功能。它是一个构造函数,在创建合约时运行,之后无法调用。它将永久存储合约创建者的地址。 msg(连同 tx 和 block)是一个全局变量,其中包含一些区块链特定的属性,这些属性可以被合约代码访问。 msg.sender 始终保存当前函数的外部调用者的地址。

最后,用户或其他合约实际调用来完成本合约功能的函数是mint和send。如果合约创建者以外的其他人调用 mint,则不会发生任何事情。并且任何人都可以调用 send (具有一定数量的代币)将一些硬币发送给其他人。