区块链 solidity 初识合约

开发钱包

  1. myetherwallet 钱包

https://www.myetherwallet.com/官网 下就可以创建一个新钱包区块链 solidity 初识合约然后一路下一步,即可创建一个钱包,最后会生成pdf,里面有钱包的二维码,Address,Private Key 保存好这个PDF,除了pdf还有一个种子文件,其实就是一个json串

  1. MetaMask 钱包 MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便。区块链 solidity 初识合约区块链 solidity 初识合约

chrome浏览器安装MetaMask后,直接用MetaMask创建钱包或者通过myetherwallet.com(上面提到的)创建钱包,然后用MetaMask导入钱包myetherwallet私钥即可。

创建钱包完成后,我们一起来看看MetaMask钱包的主网和测试网

区块链 solidity 初识合约

Main Ethereum Networketh的主网络,真是的币就是存在主网络上,但不建议把真是币存在这里

Ropsten Test Networketh的测试网 Kovan Test Networketh的测试网 这两个均为测试网络,切换不同的测试网会有不同的地址,便于开发使用.

在测试网络如何获取代币呢?

Ropsten Test Network,点击BUY->ROPSTEN TEST FAUCET会跳转到https://faucet.metamask.io/页面,可以请求获取测试用的eth代币,也可以给别人发送测试代币。操作完成后钱包会显示相应的测试代币数量。

Kovan Test Network,获取测试代币的方式是:在https://gitter.im/kovan-testnet复制当前测试环境下的钱包地址,然后在gitter的社区中,@管理员epheph发送自己的钱包地址

atom安装插件

solidity编写智能合约在atom编辑器里面编写,需要下载两个插件 autocomplete-solidity language-ethereum

区块链 solidity 初识合约

solidity案例

// pragam 关键字
// solidity 当前语言
// 0.4 主版本
// .19 副版本
// ^向上兼容,solidity (0.4.19~0.4.99)都可以编译,0.5则不能编译
pragam solidity ^0.4.19;

// construct 关键字声明类
contract Person {  
    uint age = 0; // 默认类型为internal
    string internal name = "lin";
    string public homeAddress = "北京市朝阳区";    // public声明的属性,会自动生成同名的get函数,返回该属性值
    string private company = "孔壹学院";

    // 构造函数,与类名同名,首次初始化时调用
    function Person() public {
        age = 18;
    }

    // set方法
    function setCompany(uint a) public {
        age = a;
    }
    // get方法
    function getCompany() view public returns (uint) {
        return age;
    }

    function getCurrentAddres() view public returns (address) {
        // msg.sender 返回当前操作合约的钱包的地址
        return msg.sender;
    }

    // 普通函数
    function kill() public{
        // 析构函数,调用时销毁当前合约
        selfdestruct(msg.sender);
    }
}

contract ChildPerson is Person {  
    function test() public {
        age = 100;
        name = "AWM";
    }
}

internal类型的属性:

  • 可以在合约自己内部和子类中使用 private类型的属性: 只能在合约内部自己使用 public类型的属性: 除了能够在合约内部和子类中使用以外,还可以自动生成一个get行数,函数名和属性名相同,返回值为属性自己

合约部署

打开浏览器,在地址栏输入http://remix.ethereum.org/直接点击回车键,后面补齐当前最新版的soliditysdk的版本。 把上面案例代码直接粘贴到左侧编辑器中,会自动编译查错,正常编译通过后,可以在右侧面板点击run选项。

  • Environment指合约要部署的网路环境,JavaScript VM是本地的测试网络;injected Web3是发布到公链。
  • Account指部署合约的钱包地址,因为部署合约需要往公链上写数据,所以需要消耗代币。选择本地测试网络的话,有默认的五个免费的钱包,里面各有100eth。选择部署到公链的话,通过选择MateMask的网络环境(主网或两个测试网络),Account会显示对应的网络环境下的钱包地址(钱包中必须要有代币才行)

Gas limitValue默认即可

然后在下面可以选择solidity代码中声明的类,也就是我们要部署到网络中的类,对应上述代码就是PersonChildPerson两个类选择其一。

之后点击create,支付完所需的代币手续费后,等待部署完成即可,部署成功后便可以在下方看到合约的地址信息,及合约中暴露出来的各种方法,如getAgesetAge等,可以调用这些方法从部署在网络上的合约中写入数据(花费代币)及读取数据(免费),调用kill方法时会执行析构函数selfdestruct,从网络中销毁合约。

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/5097

联系我们

aliyinhang@gmail.com