以太坊swarm搭建与使用

以太坊每个区块都有gas限制,每个区块所能容纳的交易有限,也不可能存储大容量文件。swarm与ipfs类似,提供一个云存储,可能将要存储的内容放在swarm上,得到一个内容hash(代表所存储的内容,只要内容有修改,哈希就会改变),将hash存储在区块链上生成证明。

----------------------------------------------------------------------------------------------------------------------------------------

具体介绍,官方文档

搭建参考:这篇

web3 api:here

---------------------------------------------------------------------------------------------------------------------------------------

一、搭建网络

这里打算使用swarm连接私有链,需要的环境是geth,要将geth和swarm加入西荣path中。

输入swarm version查看是否安装成功。

1、首先生成一个账户,swarm使用这个账户

创建测试项目目录:

mkdir test_swarm

cd test_swarm

geth --datadir ./ account new

2、启动geth

初始化(genesis.json为创世文件,文章最后有)

geth init genesis.json --datadir ./

启动:

geth --datadir ./ --nodiscover  --rpc --rpcapi "net,eth,db,web" --networkid 7788 console

3、连接swarm和geth:

swarm --bzzaccount 0x1da7eda1fc9e2a5a51e74ed55ce0827dab4be44a --datadir /home/zhj/project/test_chain/test_swarm/ --swap-api /home/zhj/project/test_chain/test_swarm/geth.ipc --nodiscover

其中datadir是swarm上数据在本地的存储,swap-api需要连接geth.ipc,nodiscover是不主动发现连接其他节点,可以手动添加节点(一旦连接一次后,其他节点的地址就会被保存下来,下次启动时会自动尝试连接)

现在已经启动了,可以尝试使用命令行来上传和下载数据,参考官方文档,这篇主要介绍和使用web3进行交互,所以不再介绍命令行使用。

二、使用web3-swarm api

参考文档在前面有,或者这篇中文翻译文档

先初始化nodejs环境:npm init

然后下载依赖:

npm install web3

npm install web3-bzz

下面是使用web3和swarm交互的代码:

app.js

var Bzz = require('web3-bzz')
var bzz = new Bzz(Bzz.givenProvider || 'http://localhost:8500')

let User = {
  "name": "z",
  "age": 11,
  "major": "cs"
};
buff = Buffer.from(JSON.stringify(User));
bzz.upload(buff).then(function(hash) {
  console.log("uploaded a string. hash: ", hash)
  bzz.download(hash).then(function(buffer){
    console.log('downloaded string: ', String.fromCharCode.apply(null, buffer))
  })

})

其中前两行是调用swarm的包,然后连接本地swarm。

然后创建了一个json类型,下面测试上传和下载功能就是要将这个json传到swarm上面,然后再下载下来。

执行node app.js:

zhj@zhj-HP:~/project/test_swarm/web3test$ node app.js 
uploaded a string. hash:  195ed46aa020ee28c1b3f2ec8d69a5b78ae4d12c66bece1fa56d89fa1ec3d892
downloaded string:  {"name":"z","age":11,"major":"cs"}

第二行是上传成功后返回的hash值,第三行是下载之前上传的内容,对比内容是相同的,说明成功。

更多功能参考官方文档。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

genesis.json:

{
  "config":{
    "chainId":7788,
    "homesteadBlock":0,
    "eip155Block":0,
    "eip158Block":0
  },
  "nonce": "0x0000000000000042",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x00",
  "gasLimit": "0x80000000",
  "difficulty": "0x4ffff",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {     }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值