1. 如何创建私链
创建创世配置文件:
首先需要创建一个“创世”json配置文件,此文件描述了创世区块的一些参数。下面就是文件中的内容:
{
"coinbase": "",
"config": {
"homesteadBlock": 5
},
"difficulty": "0x20000",
"extraData": "0x",
"gasLimit": "0x2FEFD8",
"mixhash": "",
"nonce": "0x0",
"parentHash": "000000000000000000000000",
"timestamp": "0x00",
"alloc": {
"":
{
"balance":""
}
}
}12345678910111213141516171819
将上面这段代码复制到一个文本文件里并起名为genesis.json
创世!:
为了不和主链的数据冲突,这里建议建立自己的私链数据文件夹。在我的电脑上在E盘建了一个EthDBSpace作为以太坊实验工作区,并在里面创建了一个PrivChain文件夹作为我的第一个私链的数据存放文件夹
这里为了方便管理将genesis.json放在了EthDBSpace文件夹下
打开Windows命令行
键入如下命令
geth --datadir "E:\EthDBSpace\PrivChain" init "E:\EthDBSpace\genesis.json"1
–datadir 选项用来指定我们私链的数据目录。在我的电脑上是E:\EthDBSpace\PrivChain
init 命令为创世命令,后面紧跟着我们的创世配置文件路径。
点击回车后执行结果如下
此时创世完成!
创建账户:
为了在私链上做实验,我们还需要在私链上建立自己的账户
Windows命令行键入
geth --datadir "E:\EthDBSpace\PrivChain" console1
我们由于已经创世成功所以第二次进入客户端时我们不用再次指定genesis.json文件路径,而是直接–datadir 指明私链数据路径即可。
console命令用来开启geth的命令行。
点击回车后,客户端会先经过一阵初始化。在命令提示符出现后,说明已经进入geth console
在geth命令行中键入
personal.newAccount('Your Password')1
personal.newAccount 函数用来创建账户,其中参数为账户密码
点击回车后会出现
账户创建成功后会在命令下方以绿色字符列明创建账户的地址,也即账户的公钥
我们可以先查下账户余额,在geth命令行中键入:
my=eth.accounts[0]
eth.getBalance(my)12
my=eth.accounts[0],此句的目的是将我们刚创建的账户地址赋值给my变量。这样可以简化后续账户地址输入。其中eth.accounts记录了本机上所有账户地址。由于我们第一次创建账户,所以目前电脑上只有一个账户。所以这里我们用eth.accounts[0]提取第一个账户地址。eth.getBalance函数用来获得账户余额,参数填入账户地址。这里的my变量记录的就是第一个账户的地址。
希望我的回答可以帮到您哦
2. 「官方」搭建Web3:Filecoin与以太坊携手共进
这是Protocol Labs创始人Juan Benet在EthCC 2021上的演讲概要,查看完整内容:
https://www.bilibili.com/video/BV1eb4y1r7E1
Filecoin网络是面向生态的,它与Protocol Labs搭建模块化解决方案的倾向是一致的。因为它本来就是设计给其他人使用,所以Filecoin在Web3领域的其他栈、应用和生态里如鱼得水。自从其在2020年10月的启动开始,Filecoin已经增长到超过8 exbibytes的可用存储空间,有超过400个项目进入了这个生态。以太坊就是一个能持续证明其可协作性和共同利益的生态系统。
Filecoin + 以太坊
>>>>Filecoin和以太坊虚拟机(EVM)
Filecoin生态意识到网络支持智能合约的好处。最初,开发者社区相信架设在以太坊和Filecoin之间的桥服务足够在Filecoin上支持智能合约了。不过,通过桥来使用智能合约是很笨重的方式,相比于直接在以太坊实现智能合约的功能和可组合性更是不足。有一个提议是在Filecoin上加入以太坊虚拟机(EVM),从而在存储层启用对智能合约的支持,以及为这两个生态的结合提供更多机会。
>>>>开发者工具和资源
Fleek:让用户能为去中心化网络架设网站、存储和分发文件及开发dapp。Fleek可以让每一个人(从专业的开发者到日常的互联网用户)更容易以去中心化的方式创建app和存储文件,从而加速去中心化网络的采用率。Fleek可以在Filecoin上进行自动化存档,并通过ENS(以太坊域名服务)这样的应用来利用以太坊的生态系统。
https://fleek.co/
Web3.Storage:是一个让开发者在Filecoin去中心化存储网络上存取数据的简单接口。Web3.Storage为开发者(包括以太坊dapp开发者)提供了搭建应用的简单方式,这些应用可以带有冗余的去中心化的存储以及安全的内容寻址数据。
http://web3.storage/
PowerLoom:以去中心化的方式将链上和链下数据聚合起来以生成带有密码学证明的快照。它旨在通过一个丰富的节点和利益相关者生态系统(他们被激励参与到协议里)来搭建信任,并按需提供洞见。PowerLoom特别适用于以太坊DeFi这样的生态,这类系统是非常复杂的,而且需要基于验证的信任。
https://powerloom.io/
>>>>DeFi应用
SecuredFinance(https://secured-finance.com/)是一个综合平台,整合了基于智能合约的点对点固定利率贷款、抵押品管理服务、货币间交易和其他类型的利率产品。Secured Finance的协议是去中心化的点对点金融协议,提供了由以太坊智能合约赋能的区块链上的中后台银行业务。Secured Finance可以满足Filecoin网络内的需求,它提供的解决方案能够满足Filecoin存储提供者对FIL贷款的强烈需求。
>>>>数据市场
OceanProtocol(https://t.co/misApE3ggc?amp=1)是一个在Filecoin上搭建的数据市场。Ocean的数据token(data tokens)是以太坊ERC-20 token,可以轻易地用于发布和消费数据服务。如果你有1个数据token,你可以访问一个特定的数据服务。Ocean market是一个专门为数据服务的去中心化交易所,它分叉了一个Balancer AMM(自动化做市商)来降低gas成本。在这个市场中,用户可以对数据进行发布、购买、销售、消费和stake操作。
通过Filecoin,用户可以利用Ocean来发起自己的Filecoin数据市场,或创建一个Filecoin dataDAO或指数基金。通过Ocean Protocol的工具和Filecoin的去中心化存储数据库,我们正见证新生的开放数据经济。
>>>>视频应用
LivePeer:是一个去中心化的在线视频流媒体基础设施,由以太坊区块链确保安全性。将Filecoin和IPFS结合提供存储和内容分发功能后,去中心化视频应用就成为可能了。
https://livepeer.org/
Voodfy:正为私有的视频架设服务提供去中心化工具。这是一个多功能的安全流媒体解决方案,让用户能完全控制自己的内容,这包括了访问权的设定以及变现的方式。它利用了Livepeer、Ethereum、Textile Powergate和Filecoin.
https://voodfy.com/
VideoCoin:正搭建一个能可靠地创建、存储和交易基于视频的NFT解决方案,它可以绕过在以太坊上存储实际内容时固有的复杂性和费用。VideoCoin正将其去中心化视频处理网络与Filecoin整合起来,以搭建首个专门为创建和交易视频NFT服务的平台。这个平台是新生的全球数字收藏品市场急需的一部分。
https://videocoin.io/
>>>>NFT
nft.storage(http://nft.storage/)是一个由Protocol Labs实验室和Pinata支持的服务,它专门为存储NFT数据而设计。
nft.storage让开发者通过内容寻址和去中心化存储来保护其NFT资产和相关的元数据,确保所有的NFT遵循最佳实践以实现长期的可访问性。
未来的使用场景
随着Filecoin和Ethereum生态系统的成长和重叠,会出现更多的新生用例和开发者机会。一些可以进行创新的用例包括:
>>>>可组合的DeFIL
将存储和Defi的世界结合可以产生一些机会。人们可以将市场订单(如要价、出价和交易)带到一个去中心化交易所上,以观察市场是如何评判这些订单的价值的。通过这样的能力,生态系统可以开始想象硬件期货(hardware futures)和时空期货(spacetime futures)等的出现。
>>>>数据丰富的NFT
NFT将会越来越复杂,而Web3社区需要 探索 采用数据丰富(data-rich)的NFT的方式。VideoCoin已经将其视频处理引擎与Filecoin连接起来,以结合以太坊对NFT的支持能力及Filecoin的存储能力。像VideoCoin这样的工具可以用来创建一类新型的NFT,如短电影、视频片段和完整长度的专题特写。
>>>>按观看次数支付的媒体
通过在Filecoin上存储的信息,我们可以利用以太坊的token支持能力去创建由token保护的页面和媒体(文章、电影和音乐等)。我们可以复制Web2时代的按观看次数支付模式,而无需复制数据和广告模型。
这只是一个开始!Filecoin和以太坊生态有长期的协作 历史 和机会,未来可期。
3. 以太坊多节点私有链部署
假设两台电脑A和B
要求:
1、两台电脑要在一个网络中,能ping通
2、两个节点使用相同的创世区块文件
3、禁用ipc;同时使用参数--nodiscover
4、networkid要相同,端口号可以不同
1.4 搭建私有链
1.4.1 创建目录和genesis.json文件
创建私有链根目录./testnet
创建数据存储目录./testnet/data0
创建创世区块配置文件./testnet/genesis.json
1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json
1.4.3 启动私有节点
1.4.4 创建账号
personal.newAccount()
1.4.5 查看账号
eth.accounts
1.4.6 查看账号余额
eth.getBalance(eth.accounts[0])
1.4.7 启动&停止挖矿
启动挖矿:
miner.start(1)
其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
停止挖矿,在 console 中输入:
miner.stop()
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
1.4.8 转账
目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:
我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:
发送交易,账户 0 -> 账户 1:
需要输入密码 123456
此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。
使用 miner.start() 命令开始挖矿:
miner.start(1);admin.sleepBlocks(1);miner.stop();
新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
用同样的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json
启动私有节点一,修改 rpcport 和port
可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。
假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点二连接到节点一。
首先要知道节点一的 enode 信息,在节点一的 JavaScript console 中执行下面的命令查看 enode 信息:
admin.nodeInfo.enode
" enode://@[::]:30303 "
然后在节点二的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点一:
addPeer() 的参数就是节点一的 enode 信息,注意要把 enode 中的 [::] 替换成节点一的 IP 地址。连接成功后,节点一就会开始同步节点二的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。
通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。
除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点
参考: https://cloud.tencent.com/developer/article/1332424
4. Windows下VS2015编译以太坊源码cpp-ethereum失败
1.准备工作。windows64位系统,C盘预留一定空间,下载并安装vs2015(官方注明只支持VS2015,待验证),cmake我用的3.10.1,将系统语言调成非unicode语言,如英文(美国),否则最后编译时会有错误。
2.项目clone到本地,项目地址:
3.执行 submole updata --init。
4.将script目录下install_deps.bat拷贝至根目录并执行,该步骤会将hunter、boost、libjson等一系列下载至C盘,时间较长,请耐心等待。
5.控制台cd到项目所在目录并创建build子目录,
5. 以太坊是什么丨以太坊开发入门指南
以太坊是什么丨以太坊开发入门指南
很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及的各晦涩的概念,轻松带大家入门。
以太坊是什么
以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用。
在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。
以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。
目前围绕以太坊已经形成了一个较为完善的开发生态圈:有社区的支持,有很多开发框架、工具可以选择。
智能合约
什么是智能合约
以太坊上的程序称之为智能合约, 它是代码和数据(状态)的集合。
智能合约可以理解为在区块链上可以自动执行的(由事件驱动的)、以代码形式编写的合同(特殊的交易)。
在比特币脚本中,我们讲到过比特币的交易是可以编程的,但是比特币脚本有很多的限制,能够编写的程序也有限,而以太坊则更加完备(在计算机科学术语中,称它为是“图灵完备的”),让我们就像使用任何高级语言一样来编写几乎可以做任何事情的程序(智能合约)。
智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。
目前除数字货币之外,真正落地的应用还不多(就像移动平台刚开始出来一样),相信1到3年内,各种杀手级会慢慢出现。
编程语言:Solidity
智能合约的默认的编程语言是Solidity,文件扩展名以.sol结尾。
Solidity是和JavaScript相似的语言,用它来开发合约并编译成以太坊虚拟机字节代码。
还有长像Python的智能合约开发语言:Serpent,不过建议大家还是使用Solidity。
Browser-Solidity是一个浏览器的Solidity IDE, 大家可以点进去看看,以后我们更多文章介绍Solidity这个语言。
运行环境:EVM
EVM(Ethereum Virtual Machine)以太坊虚拟机是以太坊中智能合约的运行环境。
Solidity之于EVM,就像之于跟JVM的关系一样,这样大家就容易理解了。
以太坊虚拟机是一个隔离的环境,在EVM内部运行的代码不能跟外部有联系。
而EVM运行在以太坊节点上,当我们把合约部署到以太坊网络上之后,合约就可以在以太坊网络中运行了。
合约的编译
以太坊虚拟机上运行的是合约的字节码形式,需要我们在部署之前先对合约进行编译,可以选择Browser-Solidity Web IDE或solc编译器。
合约的部署
在以太坊上开发应用时,常常要使用到以太坊客户端(钱包)。平时我们在开发中,一般不接触到客户端或钱包的概念,它是什么呢?
以太坊客户端(钱包)
以太坊客户端,其实我们可以把它理解为一个开发者工具,它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能。
EVM是由以太坊客户端提供的。
Geth是典型的开发以太坊时使用的客户端,基于Go语言开发。 Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。Geth的使用我们之后会有文章介绍,这里大家先有个概念。
Geth控制台和Chrome浏览器开发者工具里的面的控制台是类似,不过是跑在终端里。
相对于Geth,Mist则是图形化操作界面的以太坊客户端。
如何部署
智能合约的部署是指把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址称为合约账户。
以太坊中有两类账户:
· 外部账户
该类账户被私钥控制(由人控制),没有关联任何代码。
· 合约账户
该类账户被它们的合约代码控制且有代码与之关联。
和比特币使用UTXO的设计不一样,以太坊使用更为简单的账户概念。
两类账户对于EVM来说是一样的。
外部账户与合约账户的区别和关系是这样的:一个外部账户可以通过创建和用自己的私钥来对交易进行签名,来发送消息给另一个外部账户或合约账户。
在两个外部账户之间传送消息是价值转移的过程。但从外部账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作(比如转移代币,写入内部存储,挖出一个新代币,执行一些运算,创建一个新的合约等等)。
只有当外部账户发出指令时,合同账户才会执行相应的操作。
合约部署就是将编译好的合约字节码通过外部账号发送交易的形式部署到以太坊区块链上(由实际矿工出块之后,才真正部署成功)。
运行
合约部署之后,当需要调用这个智能合约的方法时只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在EVM中执行了。
Gas
和云计算相似,占用区块链的资源(不管是简单的转账交易,还是合约的部署和执行)同样需要付出相应的费用(天下没有免费的午餐对不对!)。
以太坊上用Gas机制来计费,Gas也可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量和类型,占用的内存等),用来完成运行就需要越多Gas。
任何特定的合约所需的运行合约的Gas数量是固定的,由合约的复杂度决定。
而Gas价格由运行合约的人在提交运行合约请求的时候规定,以确定他愿意为这次交易愿意付出的费用:Gas价格(用以太币计价) * Gas数量。
Gas的目的是限制执行交易所需的工作量,同时为执行支付费用。当EVM执行交易时,Gas将按照特定规则被逐渐消耗,无论执行到什么位置,一旦Gas被耗尽,将会触发异常。当前调用帧所做的所有状态修改都将被回滚, 如果执行结束还有Gas剩余,这些Gas将被返还给发送账户。
如果没有这个限制,就会有人写出无法停止(如:死循环)的合约来阻塞网络。
因此实际上(把前面的内容串起来),我们需要一个有以太币余额的外部账户,来发起一个交易(普通交易或部署、运行一个合约),运行时,矿工收取相应的工作量费用。
以太坊网络
有些着急的同学要问了,没有以太币,要怎么进行智能合约的开发?可以选择以下方式:
选择以太坊官网测试网络Testnet
测试网络中,我们可以很容易获得免费的以太币,缺点是需要发很长时间初始化节点。
使用私有链
创建自己的以太币私有测试网络,通常也称为私有链,我们可以用它来作为一个测试环境来开发、调试和测试智能合约。
通过上面提到的Geth很容易就可以创建一个属于自己的测试网络,以太币想挖多少挖多少,也免去了同步正式网络的整个区块链数据。
使用开发者网络(模式)
相比私有链,开发者网络(模式)下,会自动分配一个有大量余额的开发者账户给我们使用。
使用模拟环境
另一个创建测试网络的方法是使用testrpc,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更方便快捷。而且testrpc可以在启动时帮我们创建10个存有资金的测试账户。
进行合约开发时,可以在testrpc中测试通过后,再部署到Geth节点中去。
更新:testrpc 现在已经并入到Truffle 开发框架中,现在名字是Ganache CLI。
Dapp:去中心化的应用程序
以太坊社区把基于智能合约的应用称为去中心化的应用程序(DecentralizedApp)。如果我们把区块链理解为一个不可篡改的数据库,智能合约理解为和数据库打交道的程序,那就很容易理解Dapp了,一个Dapp不单单有智能合约,比如还需要有一个友好的用户界面和其他的东西。
Truffle
Truffle是Dapp开发框架,他可以帮我们处理掉大量无关紧要的小事情,让我们可以迅速开始写代码-编译-部署-测试-打包DApp这个流程。
总结
我们现在来总结一下,以太坊是平台,它让我们方便的使用区块链技术开发去中心化的应用,在这个应用中,使用Solidity来编写和区块链交互的智能合约,合约编写好后之后,我们需要用以太坊客户端用一个有余额的账户去部署及运行合约(使用Truffle框架可以更好的帮助我们做这些事情了)。为了开发方便,我们可以用Geth或testrpc来搭建一个测试网络。
注:本文中为了方便大家理解,对一些概念做了类比,有些严格来不是准确,不过我也认为对于初学者,也没有必要把每一个概念掌握的很细致和准确,学习是一个逐步深入的过程,很多时候我们会发现,过一段后,我们会对同一个东西有不一样的理解。
6. 如何在windows下搭建以太坊
以太坊?是什么东西,是以太网吧?
7. 以太坊eth是什么 如何使用GPU和矿池挖矿
以太坊eth是数字货币的一种。挖矿教程可以参考视频
8. 以太坊能做啥
以太坊是一个开源的,能让大家自由开发智能合约的区块链公共平台。
它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。
以太坊就像互联网中安卓,Windows系统一样,它能提供一套专门的脚步语言,让大家可以随意地在上面开发。
9. 如何搭建自己的区块链
第一部分:从
0
到
1
建立自己的区块链
目录:
1.1
从模仿开始,初识区块链
1.2
区块链的基础:共识机制剖析
1.3
共识机制的设计原理和设计方法
1.4
如何快速克隆一条区块链
1.5
如何把比特币变成自己的私链–分叉比特币
1.6
如何把以太坊变成自己的私链–分叉以太坊
1.7
如何把
Ripple
变成自己的私链–分叉
ripple
1.8
如何把
stellar
变成自己的私链–分叉
stellar
1.9
如何搭建一个矿池,并挖出自己的创始区块
1.10
如何开发自己的区块链钱包(Windows
和
MAC)
1.11
如何开发自己的区块链钱包(Android
和
IOS)
1.12
如何开发一个类似于
blockchain.info
的在线钱包
1.13
如何增加自己的区块链网络的安全性和鲁棒性
1.14
如何利用
coind
来处理充值提现业务
1.15
如何利用资金池搭建一个混币服务
1.16
如何设计一种新的挖矿算法
一般情况下都是这个流程,但一般人也是非常难以完成的。区块链成熟的项目有以太坊、DECENT、比特币等等。
10. 以太坊私有链搭建(2)--修改挖矿难度
官放解释就不多说了,Difficulty值越大,越难出区块,意味着交易不容易确认,默认的机制是难度越来越大,对私有链一般是不可接受的,当然这个值也不是越小越好,这样的话也会让机器的很卡,所以这个值要根据项目自己确定。
创世区块中的的难度能影响整体的挖矿速度,但是并不能改变难度上升这个趋势,所以在自己的项目中,仅仅在创世区块中指定难度是不够的。
当前geth版本 1.7 unstable
源文件 consensus/ethash/consensus.go 行290
好了,这里也不多想怎么实现了,我也看不懂,简单改下返回难度为恒定值就会~~
将这个函数改为
重新make geth,试试看出块难度是不是恒定了。