狼爱上狸

我胡汉三又回来了

#

一步步构建自己的智能合约

https://segmentfault.com/a/1190000014797663

posted @ 2019-12-26 16:09 狼爱上狸 阅读(135) | 评论 (0)编辑 收藏

如何审计一个智能合约

https://cloud.tencent.com/developer/article/1522230

posted @ 2019-12-26 15:37 狼爱上狸 阅读(104) | 评论 (0)编辑 收藏

如何调用以太坊智能合约

https://www.cnblogs.com/KRDecad3/p/11745568.html

posted @ 2019-12-26 15:31 狼爱上狸 阅读(218) | 评论 (0)编辑 收藏

私钥生成钱包助记词的流程

https://www.cnblogs.com/hankal/p/9472920.html

posted @ 2019-12-24 10:02 狼爱上狸 阅读(618) | 评论 (0)编辑 收藏

BIP39钱包助记词规范

https://www.jianshu.com/p/d5bac6d36dc6

posted @ 2019-12-24 10:01 狼爱上狸 阅读(498) | 评论 (0)编辑 收藏

remix

https://remix.ethereum.org/
http://remix.hubwiz.com/
https://ethereum.github.io/

posted @ 2019-12-22 00:27 狼爱上狸 阅读(87) | 评论 (0)编辑 收藏

Web3与智能合约交互实战

最新内容会更新在主站深入浅出区块链社区
原文链接:Web3与智能合约交互实战

写在前面

在最初学习以太坊的时候,很多人都是自己创建以太坊节点后,使用geth与之交互。这种使用命令行交互的方法虽然让很多程序员感到兴奋(黑客帝国的既视感?),但不可能指望普通用户通过命令行使用Dapp。因此,我们需要一种友好的方式(比如一个web页面)来与智能合约交互,于是问题的答案就是web3.js

Web3.js

Web3.js是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合,主要包括下面几个库:

  • web3-eth用来与以太坊区块链和智能合约交互
  • web3-shh用来控制whisper协议与p2p通信以及广播
  • web3-bzz用来与swarm协议交互
  • web3-utils包含了一些Dapp开发有用的功能

Web3与geth通信使用的是 JSON-RPC ,这是一种轻量级的RPC(Remote Procedure Call)协议,整个通信的模型可以抽象为下图。

Web3 Communication Model

搭建测试链

在开发初期,我们并没有必要使用真实的公链,为了开发效率,一般选择在本地搭建测试链。在本文我们选择的Ganache(在此之前使用的是testrpc,Ganache属于它的升级版),一个图形化测试软件(也有命令行版本),可以一键在本地搭建以太坊区块链测试环境,并且将区块链的状态通过图形界面显示出来,Ganache的运行界面如下图所示。

Ganache

从图中可以看到Ganache会默认创建10个账户,监听地址是http://127.0.0.1:7545,可以实时看到Current BlockGas PriceGas Limit等信息。

创建智能合约

目前以太坊官方全力支持的智能合约开发环境是Remix IDE,我们在合约编辑页面编写如下代码:

pragma solidity ^0.4.21;  contract InfoContract {         string fName;    uint age;        function setInfo(string _fName, uint _age) public {        fName = _fName;        age = _age;    }        function getInfo() public constant returns (string, uint) {        return (fName, age);    }    }

代码很简单,就是简单的给nameage变量赋值与读取,接下来切换到 run 的 tab 下,将Environment切换成Web3 Provider,并输入我们的测试链的地址http://127.0.0.1:7545,这里对这三个选项做一简单说明:

  • Javascript VM:简单的Javascript虚拟机环境,纯粹练习智能合约编写的时候可以选择
  • Injected Web3:连接到嵌入到页面的Web3,比如连接到MetaMask
  • Web3 Provider:连接到自定义的节点,如私有的测试网络。

如果连接成功,那么在下面的Account的选项会默认选择 Ganache 创建的第一个账户地址。接下来我们点击Create就会将我们的智能合约部署到我们的测试网中。接下来 Remix 的页面不要关闭,在后面编写前端代码时还要用到合约的地址以及ABI信息。

安装Web3

在这之前,先在终端创建我们的项目:

> mkdir info > cd info

接下来使用 node.js 的包管理工具 npm 初始化项目,创建package.json 文件,其中保存了项目需要的相关依赖环境。

> npm init

一路按回车直到项目创建完成。最后,运行下面命令安装web.js:

> npm install web3

注意: 在实际安装过程中我发现web3在安装完成后并没有 /node_modules/web3/dist/we3.min.js 文件,这个问题在 issue#1041中有体现,但官方好像一直没解决。不过可以在这里下载所需的文件,解压后将dist文件夹的内容拷贝到 /node_modules/web3路径下。

创建 UI

在项目目录下创建index.html,在这里我们将创建基础的 UI,功能包括nameage的输入框,以及一个按钮,这些将通过 jQuery 实现:

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title>      <link rel="stylesheet" type="text/css" href="main.css">      <script src="./node_modules/web3/dist/web3.min.js"></script>  </head> <body>     <div class="container">          <h1>Info Contract</h1>          <h2 id="info"></h2>          <label for="name" class="col-lg-2 control-label">Name</label>         <input id="name" type="text">          <label for="name" class="col-lg-2 control-label">Age</label>         <input id="age" type="text">          <button id="button">Update Info</button>       </div>      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>      <script>        // Our future code here..     </script>  </body> </html>

接下来需要编写main.css文件设定基本的样式:

body {     background-color:#F0F0F0;     padding: 2em;     font-family: 'Raleway','Source Sans Pro', 'Arial'; } .container {     width: 50%;     margin: 0 auto; } label {     display:block;     margin-bottom:10px; } input {     padding:10px;     width: 50%;     margin-bottom: 1em; } button {     margin: 2em 0;     padding: 1em 4em;     display:block; }  #info {     padding:1em;     background-color:#fff;     margin: 1em 0; }

使用Web3与智能合约交互

UI 创建好之后,在<script>标签中间编写web.js的代码与智能合约交互。首先创建web3实例,并与我们的测试环境连接:

<script>     if (typeof web3 !== 'undefined') {         web3 = new Web3(web3.currentProvider);     } else {         // set the provider you want from Web3.providers         web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));     } </script>

这段代码是web3.js Github提供的样例,意思是如果web3已经被定义,那么就可以直接当作我们的 provider 使用。如果没有定义,则我们手动指定 provider。

这里可能会存在疑问:为什么 web3 会被事先定义呢?实际上,如果你使用类似 MetaMask(一个 Chrome 上的插件,迷你型以太坊钱包)这样的软件,provider 就会被自动植入。

在上面代码的基础上,接下来设置默认的以太坊账户:

web3.eth.defaultAccount = web3.eth.accounts[0];

在上文中我们使用 Ganache 已经创建了 10 个账户了,这里我们选择第一个账户当作默认账户。

接下来需要让我们的web3知道我们的合约是什么样的,这里需要用到合约的 ABI(Application Binary Interface)ABI可以使我们调用合约的函数,并且从合约中获取数据。

在上文中我们已经在 Remix 中创建了我们的合约,这时重新回到 Remix,在 Compile 的 tab 下我们点击Details 出现的页面中我们可以拷贝合约的ABI,如下图所示。

将其复制到代码中:

var infoContract = web3.eth.contract(PASTE ABI HERE!);

接下来转到 run 的tab,拷贝合约的地址,将其复制到下面的代码中:

var info = InfoContract.at('PASTE CONTRACT ADDRESS HERE');

完成这些我们就可以调用合约中的函数了,下面我们使用 jQuery 与我们的合约进行交互:

info.getInfo(function(error, result){     if(!error)         {             $("#info").html(result[0]+' ('+result[1]+' years old)');             console.log(result);         }     else         console.error(error); });  $("#button").click(function() {     info.setInfo($("#name").val(), $("#age").val()); });

以上的代码就简单地实现了对合约中两个函数的调用,分别读取和显示nameage变量。

到此我们就完成了全部的代码,完整代码可以在 InfoContract 中找到。在浏览器中打开index.html测试效果如下图(输入名字和年龄后刷新)。

本文的作者是盖盖,他的微信公众号: chainlab

参考文献

☛ 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。

posted @ 2019-12-21 14:46 狼爱上狸 阅读(176) | 评论 (0)编辑 收藏

GitHub项目、代码搜索、使用等技巧

https://blog.csdn.net/xiaomu_347/article/details/80729892

posted @ 2019-12-21 10:14 狼爱上狸 阅读(121) | 评论 (0)编辑 收藏

如何在 GitHub 上找到你要的代码?

GitHub 在开源世界的受欢迎程度自不必多言。再加上前阵子,GitHub 官方又搞了个大新闻:私有仓库改为免费使用,这在原来可是需要真金白银的买的。可见微软收购后,依然没有改变 GitHub 的定位,甚至还更进一步。

花开两朵,各表一枝。我们今天想要聊的并不是 GitHub 多么厉害,而是你怎么能把 GitHub 用得很厉害

你在 GitHub 上搜索代码时,是怎么样操作的呢?是不是就像这样,直接在搜索框里输入要检索的内容,然后不断在列表里翻页找自己需要的内容?

或者是简单筛选下,在左侧加个语言的过滤项。

再或者改变一下列表的排序方式

这就是「全部」了吗?

一般的系统检索功能,都会有一个「高级搜索」的功能。需要在另外的界面里展开,进行二次搜索之类的。 GitHub 有没有类似的呢?

答案是肯定的。做为一个为万千工程师提供服务的网站,不仅要有,而且还要技术范儿。

如果我们自己开发一个类似的应用,会怎样实现呢?

带着思路,咱们一起来看看,GitHub 是怎样做的。

这里我们假设正要学习 Spring Cloud,要找一个 Spring Cloud 的 Demo 参考练手。

1. 明确搜索仓库标题、仓库描述、README

GitHub 提供了便捷的搜索方式,可以限定只搜索仓库的标题、或者描述、README等。

以Spring Cloud 为例,一般一个仓库,大概是这样的

其中,红色箭头指的两个地方,分别是仓库的名称和描述。咱们可以直接限定关键字只查特定的地方。比如咱们只想查找仓库名称包含 spring cloud 的仓库,可以使用语法

in:name 关键词

如果想查找描述的内容,可以使用这样的方式:

in:descripton 关键词

这里就是搜索上面项目描述的内容。

一般项目,都会有个README文件,如果要查该文件包含特定关键词的话,我想你猜到了

in:readme 关键词

2. 明确搜索 star、fork 数大于多少的

一个项目 star 数的多少,一般代表该项目有受欢迎程度。虽然现在也有垃圾项目刷 star ,但毕竟是少数, star 依然是个不错的衡量标准。

stars:> 数字 关键字。

比如咱们要找 star 数大于 3000 的Spring Cloud 仓库,就可以这样

stars:>3000 spring cloud

如果不加 >= 的话,是要精确找 star 数等于具体数字的,这个一般有点困难。

如果要找在指定数字区间的话,使用

stars: 10..20 关键词

fork 数同理,将上面的 stars 换成fork,其它语法相同

3. 明确搜索仓库大小的

比如你只想看个简单的 Demo,不想找特别复杂的且占用磁盘空间较多的,可以在搜索的时候直接限定仓库的size

使用方式:

size:>=5000 关键词

这里注意下,这个数字代表K, 5000代表着5M。

4. 明确仓库是否还在更新维护

我们在确认是否要使用一些开源产品,框架的时候,是否继续维护是很重要的一点。如果已经过时没人维护的东西,踩了坑就不好办了。而在 GitHub 上找项目的时候,不再需要每个都点到项目里看看最近 push 的时间,直接在搜索框即可完成。

元旦刚过,比如咱们要找临近年底依然在勤快更新的项目,就可以直接指定更新时间在哪个时间前或后的

通过这样一条搜索pushed:>2019-01-03 spring cloud

咱们就找到了1月3号之后,还在更新的项目。

你是想找指定时间之前或之后创建的仓库也是可以的,把pushed改成created就行。

5. 明确搜索仓库的 LICENSE

咱们经常使用开源软件,一定都知道,开源软件也是分不同的「门派」不同的LICENSE。开源不等于一切免费,不同的许可证要求也大不相同。 2018年就出现了 Facebook 修改 React 的许可协议导致各个公司纷纷修改自己的代码,寻找替换的框架。

例如咱们要找协议是最为宽松的 Apache License 2 的代码,可以这样

license:apache-2.0 spring cloud

其它协议就把 apache-2.0 替换一下即可,比如换成mit之类的。

6. 明确搜索仓库的语言

比如咱们就找 Java 的库, 除了像上面在左侧点击选择之外,还可以在搜索中过滤。像这样:

language:java 关键词

7.明确搜索某个人或组织的仓库

比如咱们想在 GitHub 上找一下某个大神是不是提交了新的功能,就可以指定其名称后搜索,例如咱们看下 Josh Long 有没有提交新的 Spring Cloud 的代码,可以这样使用

user:joshlong

组合使用一下,把 Java 项目过滤出来,多个查询之间「空格」分隔即可。

user:joshlong language:java

找某个组织的代码话,可以这样:

org:spring-cloud

就可以列出具体org 的仓库。



作者:西安北大青鸟
链接:https://www.jianshu.com/p/74ae16db62af
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted @ 2019-12-20 16:49 狼爱上狸 阅读(158) | 评论 (0)编辑 收藏

github新手使用指南

https://blog.csdn.net/Hanani_Jia/article/details/77950594源博客地址

首先,我先对GitHub来一个简单的介绍,GitHub有一个很强大的功能就是,你在服务器上边可以创建一个库(稍后会介绍怎么创建),写代码是一件很重的任务,尤其是很多人完成一个很大的项目的时候,就十分的复杂,一群人一起来写某个项目,大家完成的时间,完成的进度都是不相同的,你写一点我写一点,甚至可能你今天写的出现了错误,影响到了我昨天写的代码,最后怎么才能将大家的代码轻松的汇总起来,又怎么在汇总所有人的代码之后发现错误等等一系列问题。这样我们就用到了GitHub这个软件。我们在GitHub服务器上有一个主仓库,这里用来储存你的所有代码,如果不付费的话是所有人都可以看的,如果你不想让别人看到你的代码,可以选择付费仓库。我们创建了主仓库之后,就可以在电脑上创建分支,之后你就可以在电脑上完成自己的代码,写完之后直接同步在电脑的分支,当你认为可以上传的自己的主仓库时,就可以申请更新,当通过审核的时候,你代码就出现在了自己的主仓库中,这样全世界的程序员都可以查看你的代码。全世界现在已经有300万的注册用户,甚至还有一些相当知名的开源项目也在其中公布代码。在GitHub上你可以看到很多计算机领域的精英所分享的自己的代码。这是GitHub的两个主要优点,适合团队协作,以及下载其他优秀者的代码。

 

 

今天,GitHub已是:一个拥有143万开发者的社区。其中不乏Linux发明者Torvalds这样的顶级黑客,以及Rails创始人DHH这样的年轻极客。

· 这个星球上最流行的开源托管服务。目前已托管431万git项目,不仅越来越多知名开源项目迁入GitHub,比如Ruby on Rails、jQuery、Ruby、Erlang/OTP;近三年流行的开源库往往在GitHub首发,例如:BootStrapNode.jsCoffeScript等。alexa全球排名414的网站。

 

 

https://github.com/ 这是GitHub的官方网站,在官网上可以注册属于自己的GitHub账号,网上是全英文的,对于英语不好的同学建议使用谷歌浏览器,谷歌浏览器可以翻译网页变为中文使用起来十分方便。

 

通过简单的步骤之后你就会有一个属于自己的GitHub账号。再简单注册完成之后会需要验证你所输入的邮箱才能正常使用你的GitHub。

 在注册完成之后,完成一些简单的设置之后,你需要创建一个属于自己的库

 

在登陆自己的GitHub账号之后,在网页右上角的小加号是用来创建自己的库的按钮,之后的步骤将网页翻译成中文之后,按提示进行创建自己的库即可。

 

第一个框是自己为自己的库起一个名字,第二个框是自己对库的一个简单介绍

在创建完成自己的库之后,下面就要让自己的电脑克隆一个自己所创建的库,方面自己电脑上的代码同步到GitHub你所创建的库当中。

  为了实现,就需要安装一个软件,Git Bash。

 

下面我就介绍一下这个软件的安装,以及简单的配置。

git-scm.com 首先进入GitHub官网,下载适合自己电脑的版本

 

下载完安装包之后运行

 

 

 

在安装过程中直接默认选项即可。


 在对git bash进行配置的时候大多数新手都是一头雾水,下面我对配置的每一步就会有详细的记录。代码我也是从网上和学长那边要来的。

 

我第一次打开软件后看到这个界面也是一脸懵逼的,然后通过查阅了各种各样的资料之后才有了一些思路。

 首先要在本地创建一个ssh key 这个的目的就是你现在需要在你电脑上获得一个密匙,就是咱们平时的验证码一样的东西,获取之后,在你的GitHub账号里边输入之后,你的电脑就和你的GitHub账号联系在一起了,这样以后就可以十分方便的通过Git bash 随时上传你的代码。下边介绍一下如果获得这个钥匙,又是如何输入到你的GitHub里边的呢。

  

很多人第一次打开这个GitHub的时候一脸懵逼,认为这是什么。对于一个新手来说看到这个是没有任何思路,没有任何想法的。

这一栏 开始是你的计算机的名字在我这里就是Hanani @后边的内容是你的计算机型号,很多时候有的人打开之后@后边是乱码,这个时候也不要在意,因为有些电脑型号是中文的,可能在显示的时候出现了问题,不影响你后期的操作。

  接下来,就要开始获取属于你自己的密匙。在git bash中所有功能都是通过简单的一些代码来实现的。获取密匙的时候需要输入

$ ssh-keygen -t rsa -"your_email@youremail.com"

需要输入这个代码,引号内需要改成你在注册GitHub的时候绑定的邮箱账号。之后会有一些简单的让你确认的操作,之后让你会提示操作路径、密码等等,一般情况下就直接按回车一路过就可以。

 

如果之后你出现了这个界面之后,就说明你的密匙已经成功创建了。现在你就需要去他刚刚显示的存储位置打开它,把其中的内容复制出来。


 

.ssh这个文件夹中

之后你会看到这些内容,有的人会在id_rsa后边带有一个pub,之前看网上教程需要找到带pub的文件,因为我在生成后没有带.pub的文件,怀着忐忑的心打开id_rsa后发现这里边的密匙也是可以使用的。打开id_rsa的时候需要用记事本的方式打开。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIskXqZF3SSFtACK6zoNGJabikTBC3kig6+4j4dCq1tswhA9YkuJCi0WpRmGYWBQ67dyT2or7RedFZlULLZN3nL6AWlo5V2jRXw4WQxCon2rU1p122wmiTzqYOfsykjwullWV4bYcZU4n77A4/9WwlSqZCpEbcdwV8IMkvwfJUInSWqTvmYMcKTWu8yad5DZ2v7LBWfgsL/Tfx7aEB8UjDNJ6SPw30Yijy+62YrftYGgbuwoiL9hDNGO2LfjgOkglHTBJaZe31uQLLWc5uCzd+7Dgh7RaKMmeuz2Uv7yqm/IEU9jH8cPMR9YRPIhmzg38G2s9ILn27QqW9j1hrFY1V 15229020556@163.com

这就是我所获取的密匙,打开之后很长的一段,不要惊讶,没有问题,这就是你所需要的密匙。

 现在你就需要登录到你的GitHub上边添加这个密匙,

 

 

打开你GitHub的设置界面,找到SSH and GPG keys这个选项之后,在网页右上角有一个添加新的SSH keys 点击

 

这里的title 是让你给你的密匙起一个名字,根据个人喜好,什么名字都可以,然后把你在刚刚文件中复制的密匙,填写在下边的大框里。保存即可。

之后你就可以回到你的Git bash上边了

然后输入上边的代码,来检查是否成功绑定。第一次绑定的时候输入上边的代码之后会提示是否continue,在输入yes后如果出现了You've successfully authenticated, but GitHub does not provide shell access 。那就说明,已经成功连上了GitHub。接下来还需要简单的设置一些东西。

输入上边的代码,name最好和GitHub上边的一样,email是一定要是注册GitHub的那个邮箱地址

这两个的顺序可以颠倒,没有固定的顺序。

 下面就要将你的库克隆下来到本地电脑中,方便以后进行上传代码。

 

在库创建完成之后 会有一个网址出现在网页中。

 

个人习惯将自己的文件储存在d盘之中,所以你先需要将git bash定位在d盘中

 

git bash中输入 cd /D 注意盘名字一定要是大写。如不输入这个语句 不给git bash定位的话,默认的本地文件位置是在c盘中。

输入之后会出现/D说明定位成功。

之后输入

git clone后边的网址就是你创建库成功之后的网址


之后打开我所定位的D盘

 

可以看到,D盘中已经有以我的库名所创建的文件夹了。


打开这个文件夹,然后在其中创建一个任意格式,任意名称的文件。

 

之后重新定位git 把书 的位置,定位在你库的文件夹。


之后输入ls语句 ls的作用是查看你目前所定位的文件夹中的文件,现在可以看出来,我刚刚所创建的test文件已经出现了。


然后输入 git add test.txt

之后输入然后git commit -m "cc"  引号内的内容可以随意改动,这个语句的意思是 给你刚刚上传的文件一个备注,方便查找记忆而已


输入之后出现以上情况,然后在输入git push origin master 之后会出现一个

 

 

界面,在这里登陆你之前注册的GitHub账号之后点击login。

 

如果之后出现这种情况的话,就是登陆失败了,这时候你就需要输入你GitHub的账号名称

输入之后会出现这个界面,然后再次输入你的GitHub密码。


出现类似界面,你就可以欢呼了,代表你成功了。

现在打开你的GitHub网站,找到你创建的库

 

发现今天的格子已经绿了,说明你已经上传了你刚刚所创建的文件。

再之后,你只需要将你的代码,放到库的对应的文件夹中,然后使用 先CD到你库里面,再git add 、git commit -m "   " 、最后git push origin master,将你的代码提交就可以了。

 同样我感觉网页版的github更适合新手小白,https://blog.csdn.net/hanani_jia/article/details/79855429 这是我写的一篇网页版github的简单操作,需要的可以看一下。

posted @ 2019-12-20 15:30 狼爱上狸 阅读(114) | 评论 (0)编辑 收藏

仅列出标题
共38页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last