以太坊 --metrics_从以太坊开始-工业化

以太坊 --metrics

这是5在开始复仇重点series.Other帖子后包括:

  1. 从以太坊开始-设置
  2. 以太坊开始-撰写合约
  3. 从以太坊开始-部署和运行合同
  4. 从以太坊开始-智能合约
  5. 从以太坊开始-工业化 (本文)

上周,我们终于开发出了一种合同,该合同以一种边缘化投票的形式提供了一些价值。

但是,有一个巨大的问题:没有测试! 作为专业开发人员,这是不可接受的。 而且,没有简化绿地开发的框架,没有自动化的部署过程等。总而言之,以太坊没有提供针对现成软件开发的工具。

由于这是一个很大的问题,因此可以使用Truffle框架形式的第三方工具。

  1. 内置的智能合约编译,链接,部署和二进制管理
  2. 自动化合同测试以快速发展
  3. 可编写脚本的部署和迁移框架
  4. 用于同时部署到公共和专用网络的网络管理
  5. 访问数百个外部软件包
  6. 交互式控制台,可直接进行合同沟通
  7. 外部脚本运行程序,在Truffle环境中执行脚本
  8. 专为速度而打造
—松露网站
http://truffleframework.com/

在本文中,我们将专注于测试和部署。

建立

在正确启动之前,需要一些步骤。

安装松露

松露变成npm软件包的形式。

npminstall-g truffle

如果您对JavaScript过敏,那就太糟糕了,因为本文的其余部分包含了很多内容。

初始化项目

  1. 为项目创建一个专用文件夹
  2. 在其中初始化松露模板
mkdir  referendum
cd  referendum
truffle init

一旦执行,以下结构将出现在项目文件夹的根目录:

资料夹/档案 内容

contracts

用Solidity编写的智能合约。 在此处添加您自己的合同。

初始化后,将有一个Migration.sol文件。 不要删除它,因为它将在部署期间使用。

migrations

Deployment scripts, written in JavaScript

test

Test files, written either in Solidity or in JavaScript. Add your own tests there.

truffle.js

Truffle configuration file for advanced usage.

测试中

松露允许通过Solidity和JavaScript文件测试合同。 从10,000英尺的角度来看,Solidity测试类似于集成测试,而JavaScript更像是端到端测试。

两者都需要针对以太坊网络上部署的合同。

创建实体测试

我尝试首先用Solidity编写测试,因为我不是JavaScript迷...而感到痛苦:

  • 它需要合同和测试方法来匹配模式,例如v4之前的JUnit。
  • 没有嘲笑。
  • 测试异常需要一个巨大的技巧

那时,我受够了,然后很快又回到了JavaScript。

创建JavaScript测试

Truffle并没有彻底改变轮子:在幕后,它重用了现有框架, Mocha用于测试, Chai用于声明。

有一些测试要求。 他们应该:

  • 放在test文件夹中-这很明显
  • 具有标准的.js扩展名
  • 遵循标准的Mocha测试结构,用自定义contract()函数替换describe() contract()函数

这是对Referendum合同进行此类测试的示例:

'use strict';

letVotingToken=artifacts.require('VotingToken'); (1)
letReferendumContract=artifacts.require('ReferendumContract'); (1)

contract('ReferendumContract',()=>{

  consttotalSupply=16;
  constvotesCount=totalSupply-1;

  lettoken;
  letcontract;

  it('should be properly initialized',async()=>{
    token=awaitVotingToken.new('DUMMY',votesCount); (2)
    letquestion='Why?';
    contract=awaitReferendumContract.new(question,votesCount,token.address); (2)
    assert.equal(awaitcontract.getQuestion.call(),question); (3)
    assert.equal(awaitcontract.isOpen.call(),true); (3)
  });
});

上面的代码片段中有趣的部分如下:

  1. artifacts.require()告诉脚本需要哪些已部署合同。
  2. new()部署了这样的合同
  3. 读取数据时,使用call()代替real方法不会花费任何以太币。 这应该比调用“真实”基础方法更可取
尽管所有可用的较早版本编写的在线示例都可以使用上述代码片段的ECMAScript 6(2015!)中的语法和功能。 特别是,它利用async / await的优势通过防止回调地狱使异步代码更具可读性。 建议使用这些功能,因为它会使代码更具可读性。

执行测试

开始执行测试的最简单方法是:

truffle develop (1)
test (2)
  1. 创建一个全新的以太坊网络并启动Truffle开发控制台
  2. 启动位于test文件夹中的所有测试

初始化新的区块链应该给出以下输出:

Truffle Develop started at http://localhost:9545/

Accounts:
(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57
(1) 0xf17f52151ebef6c7334fad080c5704d77216b732
(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef
(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544
(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2
(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e
(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5
(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5
(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc
(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de

Private Keys:
(0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
(1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f
(2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1
(3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c
(4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418
(5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63
(6) 82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8
(7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7
(8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4
(9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5

Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

这是通过测试的结果:

Using network 'develop'.

  Contract: ReferendumContract
    ✓ should be properly initialized (128ms)
    ✓ should have no votes upfront
    ✓ should return proper results and burn voting token when casting votes (61ms)
    ✓ should close vote when all votes have been cast (61ms)

  Contract: VotingToken
    ✓ should have 5 tokens initialized in the first account (46ms)
    ✓ transfer should decrease owner account balance without impact on total supply (74ms)
    ✓ burn should check if owner balance has enough tokens
    ✓ burn should decrease total supply and decrease owner account balance (43ms)

或者,可以使用truffle console连接到现有的以太坊网络。 在这种情况下,现有的以太坊客户端应该正在运行并接受RPC连接:

geth--rinkeby--syncmode fast --cache 1024 --ipcpath ~/Library/Ethereum/geth.ipc --rpc
truffle console
test

请记住首先在一个单独的过程中解锁您的帐户:

geth attach
personal.unlockAccount( personal.listAccounts[0], 'password' , 10000 );
客户端绑定应在开发网络的truffle.js文件中配置:truffle.js module.exports = {网络:{开发:{主机:“ 127.0.0.1”,端口:8545,network_id:“ *”}}} ;

部署中

部署由位于migrations文件夹中的脚本处理。

此类脚本已编号。 它们只能在特定的区块链上运行一次,因此下次运行不会再次执行它们(除非经过专门配置才能执行)。 这是通过在项目初始化期间创建的Migrations.sol合同在区块链本身上实现的。 有一个名为1_initial_migration.js的脚本,配置为将其部署为第一次部署。

先前的VotingTokenReferendumContract的部署脚本如下所示:

varreferendum=artifacts.require("ReferendumContract"); (1)
vartoken=artifacts.require("VotingToken"); (1)

module.exports=(deployer)=>{ (2)
  deployer.deploy(token,"DUMMY",5).then(()=>{ (3)
    deployer.deploy(referendum,"Are you ok?",6,token.address); (4)
  });
};
  1. 至于测试,它告诉您将需要哪些合同
  2. 该文档指出:“所有迁移都必须通过module.exports语法导出一个功能。 deployer对象是您分阶段部署任务的主要接口。”
  3. deployer.deploy()显然部署了合同。 它接受由artifacts.require()返回的合同对象作为第一个参数,并将合同构造函数参数作为以下参数。
  4. 全民投票合同需要令牌合同。 因此,前者的部署通过使用后者的address字段的回调链接在一起。

要启动这些脚本,请执行以下命令:

migrate

这将产生以下输出:

Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xe596d8eae73239195fa509bd6d271643f3077c23ff0d89b6cfdbd10c2ee990a4
  Migrations: 0x0984883bb7f65b3ab11e84c10bf2cc97a8583fb1
Saving successful migration to network...
  ... 0xa7302dd463b1f05aea48bcf4beeb267ce73b64cd365981a163af16a567e2748f
Saving artifacts...
Running migration: 2_referendum_migration.js
  Deploying VotingToken...
  ... 0xd759398b331029053fa333d71eaa818e74b4614b0050ccca52801233fc59076b
  VotingToken: 0x4bc1ab343c69944d2aba0e7fa3c77ac7d4ed4577
Saving successful migration to network...
  Deploying ReferendumContract...
  ... 0x86bd810a3b5f8c0fd2b582e1b49ab9bc5bffe8e47eb3776cb5838d91e2b480ce
  ... 0xf0fb9ba91b8f1da15af837efc2287d2df6101b0d6562f049ac9d0a5261abe667
Saving artifacts...
  ReferendumContract: 0x3e94dfb44f1e121ed5c0b883b3ea473981d3e014
一个人应该已经通过松露开发或松露控制台连接到以太坊网络。

结论

此时,您应该能够以工业化的方式测试和部署合同。

现在由您决定在以太坊区块链上开始自己的旅程。

这篇文章的完整源代码可以在Github上找到。

翻译自: https://blog.frankel.ch/starting-ethereum/5/

以太坊 --metrics

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kube-state-metrics是一个开源的Kubernetes组件,用于将Kubernetes资源信息转换为指标(metrics)并暴露给Prometheus。YAML是Kubernetes中常用的声明式配置文件格式。kube-state-metrics也需要通过YAML配置文件进行部署和管理。下面来详细介绍kube-state-metrics YAML的几个方面。 首先,kube-state-metrics YAML需要配置Kubernetes API Server的地址、证书等信息,以便通过API Server获取资源信息。其次,kube-state-metrics需要指定需要收集的资源类型,比如Pod、Deployment等。这些资源类型通过Kubernetes API定义,kube-state-metrics会通过API Server获取这些资源的详细信息,并将其转换为指标。此外,kube-state-metrics YAML还需要指定需要暴露给Prometheus的指标端口等信息,以便Prometheus可以通过这些指标监控Kubernetes集群各种资源的使用情况。 在kube-state-metrics的配置中,还需要指定各个资源指标的定义方式,例如当Pod或Deployment出现异常时,kube-state-metrics需要如何定义这些指标?以及在Prometheus中如何查询这些指标。因此,可以在kube-state-metrics的YAML文件中定义各个指标的名称,以及在Prometheus中的查询方式。这里的细节需要参考kube-state-metrics的文档。 总之,kube-state-metrics YAML是配置kube-state-metrics组件的一种方法,通过对该文件进行配置,可以定制化kube-state-metrics组件的行为,并将它整合到Kubernetes集群中。而kube-state-metrics的指标可以用于Kubernetes集群的监控和自动化管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值