Genaro Eden Sharer(简称Genaro Sharer),分享者可以分享指定的存储空间,当Genaro Eden使用者上传的文件碎片存储过来时,获得对应GNX奖励;分享者进行PoS押注,并获得PoS奖励。通过共享经济原理建立通证模型,释放社会闲置存储空间并产生价值。
开发Genaro Sharer,您需要提前了解以下基础知识:
- 区块链
- 智能合约
- 以太坊
- 共识机制PoS
- GNX
- web3
确保您已安装以下依赖:
- Git
- Node.js LTS(8.x.x)
- NPM
- Python 2.7
- C++编译器(Windows系统下)
$ git clone https://github.com/GenaroNetwork/GenaroShare_GUI.git
$ npm install
# serve with hot reload at localhost:9080
$ npm run dev
$ npm run build
程序运行以后,相应链接路径以及一些系统变量的配置存放在src\config.js
中,主要包括:
-
BRIDGE_API_URL: 连接eden-bridge的url地址(测试机地址: http://101.132.159.197:8080 );
-
CHECK_MAC_UPDATE_URL:检验mac版本是否为最新版本的url地址;
-
CHECK_WIN_UPDATE_URL:检验windows版本是否为最新版本的url地址;
-
RPC_PORT:启动和调用genaroSharer-daemon的端口,默认值45016;
以上配置,请结合实际开发环境配置。
与web3相关的变量配置均存放在src\wallet\web3Util.js
中,分为开发环境和生产环境两部分,开发环境下均可使用文件中的默认值进行开发,主要包括:
-
web3Provider:web3 http privider;
-
chainId:chainId(主链配置0,测试链配置3);
-
GNXAddr:支付GNX的地址;
-
EtherscanURL:检验以太坊交易的url路径(主链配置 https://etherscan.io/tx/ ,测试链配置 https://ropsten.etherscan.io/tx/ );
-
EMUAddr:用户进行押注和获取收益时,使用的智能合约的地址;
sharer用户新建分享节点后,默认的节点配置在src\lib\config.js
中,同样分为开发环境和生产环境两部分,开发环境下均可使用文件中的默认值进行开发,主要包括:
-
paymentAddress:用户支付钱包;
-
bridges:连接eden-bridge的相关配置,默认不需要修改;
-
rpcAddress:RPC地址,默认127.0.0.1,正常情况不需修改;
-
rpcPort: RPC端口,默认9001或9002,正常情况不需要修改;
-
storagePath: 用户选择的共享空间的路径;
-
storageAllocation: 用户指定的共享空间的大小;
大部分配置都是提供genaroSharer-daemon使用的,请不要随意删除。
用户所有的分享节点的启动、暂停、重启等方法都由genaroSharer-daemon库提供。 genaroSharer-daemon + CLI 是在 Genaroi Network 上面 farming 的软件, 可以独立使用,也可以用在其他的软件中(比如本软件中)。 genaroSharer-daemon 主要提供了以下接口:
configPath
<String> : 需要启动的分享节点的配置文件路径;callback
<Function> : 接收启动是否存在错误的回调函数,有(err)
参数,如果启动成功,返回null;
用于节点启动(强制需要用户先进行stake押注,否则不能启动),启动后的节点会加入到节点列表中,可使用status
接口查询到所有节点的状态。
例子:
import dnode from 'dnode';
function start(configPath, cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.start(configPath, (err) => {
if (cb) {
cb(err);
}
d.end();
});
});
}
nodeId
<String> : 需要暂停的分享节点的Id;callback
<Function> : 接收暂停过程中是否存在错误的回调函数,有(err)
参数,如果暂停成功,返回null;
用于节点暂停(与destroy不同,停止的节点依旧存在于节点列表中)。
例子:
import dnode from 'dnode';
function stop(nodeId, cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.stop(nodeId, (err) => {
if (cb) {
cb(err);
}
d.end();
});
});
}
nodeId
<String> : 需要重启的分享节点的Id;callback
<Function> : 接收重启过程中是否存在错误的回调函数,有(err)
参数,如果重启成功,返回null;
用于节点重启,对于重启单个节点,效果和先调用stop再调用start一致。若传入的nodeId为*
,则重启所有节点。
例子:
import dnode from 'dnode';
function restart(nodeId, cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.restart(nodeId, (err) => {
if (cb) {
cb(err);
}
d.end();
});
});
}
callback
<Function> : 接收查询状态过程中是否存在错误的回调函数,有(err, status)
参数,如果重启成功,err
返回null,status
返回所有节点状态的数组;
用于查看所有节点状态。
例子:
import dnode from 'dnode';
function status(cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.status((err, statuses) => {
if (cb) {
cb(err, statuses);
}
d.end();
});
});
}
callback
<Function> : 调用结束所有节点进程的回调函数,无返回参数;
用于结束所有节点,并停止genaroSharer-daemon进程。
例子:
import dnode from 'dnode';
function killall(cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.killall(nodeId, () => {
if (cb) {
cb();
}
d.end();
});
});
}
nodeId
<String> : 需要移除的分享节点的Id;callback
<Function> : 接收移除过程中是否存在错误的回调函数,有(err)
参数,如果暂停成功,返回null;
用于停止节点,并从列表中移除(移除操作并不会删除该节点的配置文件)。
例子:
import dnode from 'dnode';
function destroy(nodeId, cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.destroy(nodeId, (err) => {
if (cb) {
cb(err);
}
d.end();
});
});
}
nodeId
<String> : 需要查询节点收益的节点Id;callback
<Function> : 接收查询过程中是否存在错误的回调函数,有(err, data)
参数,如果查询成功,err
返回null,data
返回该节点收益状况的json对象。
用于查询节点的收益。
例子:
import dnode from 'dnode';
function checkReward(nodeId, cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.checkReward(nodeId, (err, data) => {
if (cb) {
cb(err, data);
}
d.end();
});
});
}
nodeId
<String> : 需要获取节点收益的节点Id;callback
<Function> : 接收获取过程中是否存在错误的回调函数,有(err, data)
参数,如果查询成功,err
返回null,data
返回收益结果的json对象。
用于获取节点收益(获取的收益存放在用户新建节点是押注所使用的钱包中)。
例子:
import dnode from 'dnode';
function getReward(nodeId, cb) {
let d = dnode.connect('45016');
d.on('remote', (remote) => {
remote.getReward(nodeId, (err, data) => {
if (cb) {
cb(err, data);
}
d.end();
});
});
}
This project was generated with electron-vue@1c165f7 using vue-cli. Documentation about the original structure can be found here.