LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > 如何在Akash网络上部署PulseChain节点

如何在Akash网络上部署PulseChain节点

2021-11-02 Akash 来源:区块链网络


重要提醒:

因为缺少引导节点、网络配置(config.toml、genesis.json),这不会将您连接到真正的 PulseChain 节点。

这里需要等 PulseChain 开发人员提供的完整说明(README.md · 16178c59 · PulseChain / Go-Pulse · GitLab)。

注:

确保在带有 SSD 的供应商上部署 geth。不能在 HDD 上运行 geth,因为将 geth 数据存储在磁盘上是一种糟糕的方式。

更多常见问题解答:https://geth.ethereum.org/docs/faq。

译者注:

Q:为什么我无法在 HDD 上运行完整节点?

A:在 HDD 上执行快速同步将花费比您愿意等待的当前数据架构更多的时间。即使你等待它,硬盘也无法跟上主网上交易处理的读/写要求。

但是,您应该能够在对系统资源影响最小的情况下在 HDD 上运行轻客户端。但是,如果您希望运行完整节点,则 SSD 是您唯一的选择。

我使用Ubuntu 20.04.2 LTS Linux发行版及以下软件:

akash:v0.12.1 (在Akashnet上运行)。geth:v0.2.0-6abf18d00(用于在Akashnet上部署)。

先认识这两个新东西:

Akashnet 是未来的去中心化云;PulseChain 是节能、更便宜、更快、收费的以太坊分叉。

这个想法很简单–利用 Akashnet decloud 来部署 PulseChain 节点。

在运行一个实例的情况下,Akashnet 要比亚马逊 AWS 服务器便宜将近 86%,这是 Akashlytics 给出的几个云平台价格对比:Akashlytics

话不多说,为了节省你我的时间,以下让我们直接跳到命令行界面的步骤。

一、安装 Akash 客户端

AKASH_VERSION=\"$(curl-s\"$AKASH_NET/version.txt\")\"
curlhttps://raw.githubusercontent.com/ovrclk/akash/master/godownloader.sh|sh-s--\"v$AKASH_VERSION\"

译者注:

为了后续命令能执行,你需要安装 jq 工具,对命令的 JSON 结果美化和过滤。

检查 jq 工具是否安装:

jq --version

jq-1.6

安装后将返回 jq 版本,如果没有安装,可以使用如下命令:

sudo apt install -y jq

二、创建你的 Akash 钱包

akashkeysadddefault

这个命令将输出助记词,确保将其保存在一个安全的地方。

它还会输出你的地址,在我的例子中,地址是 akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h。

exportAKASH_ACCOUNT_ADDRESS=akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h

更多关于 Akash 钱包介绍请参考:Page not found - Akash Guidebook

三、为你的 Akash 钱包充值

你需要大约10个 AKT(Akash 代币)来开始,你可以在这里提到的任何一个交易所购买:https://akash.network/token。

译者注:

这里实际只需要大于 5AKT即可。

查询你的钱包的余额:

exportAKASH_NET=\"https://raw.githubusercontent.com/ovrclk/net/master/mainnet\"
exportAKASH_NODE=\"$(curl-s\"$AKASH_NET/rpc-nodes.txt\"|shuf-n1)\"

akash\
--node\"$AKASH_NODE\"\
querybankbalances\"$AKASH_ACCOUNT_ADDRESS\"

换算:1 akt = 1000000 uakt (akt*10^6)

或者你也可以执行如下命令进行换算:

akash\
--node\"$AKASH_NODE\"\
querybankbalances\"$AKASH_ACCOUNT_ADDRESS\"\
-ojson|jq-r'(.balances[0].amount|tonumber/pow(10;6))'

我正在使用生产环境 Akashnet-2 网络,更多关于 Akash 不同网络的信息请参考:Page not found - Akash Guidebook

四、创建证书文件 要创建一个部署,首先必须创建一个证书。命令如下:

exportAKASH_CHAIN_ID=\"$(curl-s\"$AKASH_NET/chain-id.txt\")\"
akashtxcertcreateclient\
--fromdefault\
--chain-id$AKASH_CHAIN_ID\
--node$AKASH_NODE\
--gas-prices=\"0.025uakt\"--gas=\"****\"--gas-adjustment=1.15

每个帐户只需要创建一次证书,并且可以在所有部署中使用。

更多关于证书的信息请参考:Page not found - Akash Guidebook

五、准备部署清单文件

创建一个名为go-pulse-geth.yml的文件,内容如下:

---
version:\"2.0\"

services:
geth:
image:andrey01/go-pulse-geth:0.2.0-6abf18d00
expose:
##8545/tcpRPCport
##SECURITYRISK:someonecantransferallyourfundsoutofyourwallet,
##incaseifyouunlockyourwalletthere!
##-port:8545
##as:8545
##proto:tcp
##to:
##-global:true
###8546/tcpWSport
##-port:8546
##as:8546
##proto:tcp
##to:
##-global:true
#30303TCPandUDP,usedbytheP2Pprotocolrunningthenetwork
-port:30303
as:30303
proto:tcp
to:
-global:true
-port:30303
as:30303
proto:udp
to:
-global:true
args:
-\"--syncmode=fast\"
-\"--cache=2048\"#makesureyouhaverequestedmoreRAMforthecontainer.
#-\"--mine\"
#-\"--miner.etherbase=0xabcdef....\"
##-\"--rpc\"
##-\"--rpcapi=admin,eth,net,web3\"
##-\"--rpcaddr=0.0.0.0\"
##-\"--rpcport=8545\"
##-\"--rpcvhosts=*\"
##-\"--ws\"
##-\"--wsaddr=0.0.0.0\"
##-\"--wsport=8546\"
##-\"--wsorigins=*\"

profiles:
compute:
geth:
resources:
cpu:
units:2
memory:
size:4Gi
storage:
size:1024Gi
placement:
akash:
#signedBy:
#anyOf:
##-\"akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63\"##AKASHverifiedhostsonly
pricing:
geth:
denom:uakt
amount:500

deployment:
geth:
akash:
profile:geth
count:1

清单文件中的关键字说明:

pricing

请注意,可能有多个不同供应商的出价。在这种情况下,两个供应商恰好都愿意接受 1uAKT 的价格,这意味着可以使用每个区块 1 uAKT或 0.000001 AKT 创建租赁来执行容器。

有了定价的限制,供应商就能知道如何对你的部署进行投标。即您愿意支付的每个区块的 uakt 数量(每个区块每 6 秒发生一次)。

因此,如果使用 1uakt,您将每月支付 1.17 美元(截至 2021年7月25日 1akt 价值2.68美元)。

计算公式:((1*((60/6)6024*30.436875))/10^6)*2.68=$1.17

signedBy

必须是:akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63

相关文档:Akash Deploy UI (Web App) - Akash Guidebook

signedBy是一种“验证”,在供应商获得 akash 批准后,他们会得到 akash 的签名以确保安全性和可靠性。

注:

更多关于编写 Akash 清单的 SDL(堆栈定义语言)的信息:Page not found - Akash Guidebook

您可以使用我的容器andrey01/go-pulse-geth:0.2.0-6abf18d00,也可以通过以下命令构建自己的容器:

[email protected]:pulsechaincom/go-pulse.git
cdgo-pulse
gitlog--oneline-1
6abf18d00(HEAD->master,upstream/master)Mergebranch'readme'into'master'
dockerbuild-tgo-pulse-geth:0.2.0-6abf18d00.
dockertaggo-pulse-geth:0.2.0-6abf18d00andrey01/go-pulse-geth:0.2.0-6abf18d00
dockerpushandrey01/go-pulse-geth:0.2.0-6abf18d00

译者注:

andrey01/go-pulse-geth:0.2.0-6abf18d00:其中 andrey01 是你的 docker hub 账户名;

最后一步推送镜像需要用到你自己的 docker hub 账号,你需要提前在 https://hub.docker.com 网站上注册好账号。

六、创建你的部署

akashtxdeploymentcreatego-pulse-geth.yml\
--fromdefault\
--node$AKASH_NODE\
--chain-id$AKASH_CHAIN_ID\
--gas-prices=\"0.025uakt\"--gas=\"****\"--gas-adjustment=1.15

如果这个命令出现如下错误:Error: RPC error -32603 - Internal error: timed out waiting for tx to be included in a block,请不用担心,您可以查询 akash 区块链以找到您的部署 ID:

$akashquerytxs\
--events\"message.sender=$AKASH_ACCOUNT_ADDRESS&message.action=create-deployment\"\
--page1--limit999999\
|jq-r'.txs[]|[.tx.body.messages[].id[]]|@csv'|\
tail-5

#下面是命令返回:
\"akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h\",\"1933977\"

译者注:

执行后会返回部署的DSEQ,后面会使用到。例如这里的1933977。

查询部署情况:

注:

为了避免后面执行命令akash tx deployment create出现这个错误:failed to execute message; message index: 0: Deployment closed,我实际没有“导出”以下 3 个“SEQ”变量。

如果你遇到了这个错误,可以使用 unset AKASH_DSEQ。

AKASH_DSEQ=1933977
AKASH_GSEQ=1
AKASH_OSEQ=1

akashquerydeploymentget\
--owner$AKASH_ACCOUNT_ADDRESS\
--node$AKASH_NODE\
--dseq$AKASH_DSEQ

deployment:
created_at:\"1933981\"
deployment_id:
dseq:\"1933977\"
owner:akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
state:active
version:Zqi3K8lyZ/XLGwe2gM9cho6VzAoKnO72FgnXlIVF/NA=
escrow_account:
balance:
amount:\"5000000\"
denom:uakt
id:
scope:deployment
xid:akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h/1933977
owner:akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
settled_at:\"1934322\"
state:open
transferred:
amount:\"0\"
denom:uakt
groups:
-created_at:\"1933981\"
group_id:
dseq:\"1933977\"
gseq:1
owner:akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
group_spec:
name:akash
requirements:
attributes:[]
signed_by:
all_of:[]
any_of:[]
resources:
-count:1
price:
amount:\"50\"
denom:uakt
resources:
cpu:
attributes:[]
units:
val:\"2000\"
endpoints:
-kind:RANDOM_PORT
-kind:RANDOM_PORT
memory:
attributes:[]
quantity:
val:\"4294967296\"
storage:
attributes:[]
quantity:
val:\"1099511627776\"
state:open

你可能已经注意到,这5个AKT现在已经在 escrow_account 下,你的 Akash 钱包余额也相应减少。在你创建一个租赁时,这些代币将被此部署使用。当你关闭租赁/部署时,它们将被退回(除去少数用于租赁本身的代币)。

更多关于部署的信息:Page not found - Akash Guidebook

七、查询市场的出价

现在,我们想实际运行我们的部署,我们需要看看市场的报价,接受我们感到满意的出价,创建租赁并发送部清单,使其启动并运行。

akashquerymarketbidlist\
--owner=$AKASH_ACCOUNT_ADDRESS\
--node$AKASH_NODE\
--dseq$AKASH_DSEQ\
--stateopen

bids:
-bid:
bid_id:
dseq:\"1933977\"
gseq:1
oseq:1
owner:akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
provider:akash1nxq8gmsw2vlz3m68qvyvcf3kh6q269ajvqw6y0
created_at:\"1933982\"
price:
amount:\"17\"
denom:uakt
state:open
escrow_account:
balance:
amount:\"50000000\"
denom:uakt
id:
scope:bid
xid:akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h/1933977/1/1/akash1nxq8gmsw2vlz3m68qvyvcf3kh6q269ajvqw6y0
owner:akash1nxq8gmsw2vlz3m68qvyvcf3kh6q269ajvqw6y0
settled_at:\"1933982\"
state:open
transferred:
amount:\"0\"
denom:uakt
pagination:
next_key:null
total:\"0\"

将AKASH_PROVIDER环境变量设置为你从可用市场出价中选择的那个:

AKASH_PROVIDER=akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal

如果akash query market bid list没有显示任何出价,请确保使用这个命令unset AKASH_PROVIDER来重置环境变量。

八、创建租赁/接受投标

akashtxmarketleasecreate\
--chain-id$AKASH_CHAIN_ID\
--node$AKASH_NODE\
--owner$AKASH_ACCOUNT_ADDRESS\
--dseq$AKASH_DSEQ\
--gseq$AKASH_GSEQ\
--oseq$AKASH_OSEQ\
--provider$AKASH_PROVIDER\
--fromdefault\
--gas-prices=\"0.025uakt\"--gas=\"****\"--gas-adjustment=1.15

注:

一旦创建租约,提供商将开始从您部署的托管账户中扣除费用,即使您尚未通过在以下步骤中上传清单来完成部署过程。

九、发送部署清单到 PulseChain 节点

现在,为了开始部署你的 PulseChain 节点,你需要将清单发送给供应商。

akashprovidersend-manifestgo-pulse-geth.yml\
--node$AKASH_NODE\
--dseq$AKASH_DSEQ\
--provider$AKASH_PROVIDER\
--fromdefault

几分钟后,你就能看到你的部署。

akashproviderlease-status\
--node$AKASH_NODE\
--dseq$AKASH_DSEQ\
--provider$AKASH_PROVIDER\
--fromdefault

你将看到如下返回:

{
\"services\":{
\"geth\":{
\"name\":\"geth\",
\"available\":1,
\"total\":1,
\"uris\":null,
\"observed_generation\":1,
\"replicas\":1,
\"updated_replicas\":1,
\"ready_replicas\":1,
\"available_replicas\":1
}
},
\"forwarded_ports\":{
\"geth\":[
{
\"host\":\"provider.akash.nixaid.com\",
\"port\":30303,
\"externalPort\":30396,
\"proto\":\"TCP\",
\"available\":1,
\"name\":\"geth\"
},
{
\"host\":\"provider.akash.nixaid.com\",
\"port\":30303,
\"externalPort\":31438,
\"proto\":\"UDP\",
\"available\":1,
\"name\":\"geth\"
}
]
}
}

唯一要注意的是,它无法直接映射出非 HTTP / HTTPS(80/443)TCP 端口,这就是所说的 nodePort 端口。

Akashnet 供应商在后台使用 Kubernetes 来实际运行您的容器。Kubernetes 控制平面从--service-node-port-range标志(default: 30000-32767)(nodePort)指定的范围内分配一个端口,这意味着您应该始终检查提供商的 Kubernetes 为您的 Akash 部署分配了哪些端口。

如果你真的需要暴露确切的端口,你可以与 Akash 提供商协商或使用一些负载均衡器/反向代理(即 nginx/haprxy/traefik)转发到这些端口。

十、Akashnet 上查看你的 PulseChain 容器的日志

您可以在这里看到 PulseChain 节点的助记词:

akash\
--node\"$AKASH_NODE\"\
providerlease-logs\
--dseq\"$AKASH_DSEQ\"\
--gseq\"$AKASH_GSEQ\"\
--oseq\"$AKASH_OSEQ\"\
--provider\"$AKASH_PROVIDER\"\
--fromdefault\
--follow
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:19.890]StartingGethonEthereummainnet...
[geth-67b86dfcbb-t8ppz]WARN[07-25|16:16:19.891]SanitizingcachetoGo'sGClimitsprovided=2048updated=682
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:19.892]MaximumpeercountETH=50LES=0total=50
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:19.892]Smartcardsocketnotfound,disablingerr="stat/run/pcscd/pcscd.comm:nosuchfileordirectory\"
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:19.895]Startingpeer-to-peernodeinstance=Geth/v1.0.6-6abf18d0-20210720/linux-amd64/go1.15.5
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:19.895]Allocatedtriememorycachesclean=102.00MiBdirty=170.00MiB
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:19.895]Allocatedcacheandfilehandlesdatabase=/root/.ethereum/geth/chaindatacache=341.00MiBhandles=524288
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.594]Openedancientdatabasedatabase=/root/.ethereum/geth/chaindata/ancient
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.595]Writingdefaultmain-netgenesisblock
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.822]Persistedtriefrommemorydatabasenodes=12356size=1.78MiBtime=40.929224msgcnodes=0gcsize=0.00Bgctime=0slivenodes=1livesize=0.00B
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.822]Initialisedchainconfigurationconfig="{ChainID:1Homestead:1150000DAO:1920000DAOSupport:trueEIP150:2463000EIP155:2675000EIP158:2675000Byzantium:4370000Constantinople:7280000Petersburg:7280000Istanbul:9069000,MuirGlacier:9200000,Ramanujan:<nil>,Niels:<nil>,MirrorSync:<nil>,PrimordialPulse:<nil>,Engine:ethash}\"
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.823]Diskstorageenabledforethashcachesdir=/root/.ethereum/geth/ethashcount=3
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.823]DiskstorageenabledforethashDAGsdir=/root/.ethashcount=2
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.823]InitialisingEthereumprotocolversions="[656463]\"network=1dbversion=<nil>
[geth-67b86dfcbb-t8ppz]WARN[07-25|16:16:20.823]Upgradeblockchaindatabaseversionfrom=<nil>to=7
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.823]Loadedmostrecentlocalheadernumber=0hash=d4e567…cb8fa3td=17179869184age=52y3mo3w
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.823]Loadedmostrecentlocalfullblocknumber=0hash=d4e567…cb8fa3td=17179869184age=52y3mo3w
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.823]Loadedmostrecentlocalfastblocknumber=0hash=d4e567…cb8fa3td=17179869184age=52y3mo3w
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.846]Regeneratedlocaltransactionjournaltransactions=0accounts=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.851]Allocatedfastsyncbloomsize=272.00MiB
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:20.921]Initializedfastsyncbloomitems=12356errorrate=0.000elapsed=69.368ms
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:21.001]Newlocalnoderecordseq=1id=151c6e3553cee58fip=127.0.0.1udp=30303tcp=30303
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:21.003]StartedP2Pnetworkingself=enode://8648620db3f7924aa5ebb6ee9282e487b5fe72f8c60a29de3a48dac715a54096d[email protected]127.0.0.1:30303
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:21.010]IPCendpointopenedurl=/root/.ethereum/geth.ipc
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:31.004]Lookingforpeerspeercount=0tried=3static=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:41.008]Lookingforpeerspeercount=0tried=3static=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:16:51.100]Lookingforpeerspeercount=0tried=4static=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.103]Lookingforpeerspeercount=0tried=5static=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.132]Blocksynchronisationstarted
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.444]Importednewstateentriescount=273elapsed=2.247?sprocessed=273pending=4369retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.487]Importednewstateentriescount=384elapsed=2.152?sprocessed=657pending=10513retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.528]Importednewstateentriescount=384elapsed=1.701?sprocessed=1041pending=16657retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.591]Importednewstateentriescount=384elapsed=2.128?sprocessed=1425pending=22795retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.756]Importednewstateentriescount=768elapsed=868.707?sprocessed=2193pending=25017retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:01.933]Importednewstateentriescount=768elapsed=2.808msprocessed=2961pending=24601retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:02.335]Importednewstateentriescount=768elapsed=7.270msprocessed=3729pending=24391retry=0duplicate=0unexpected=0
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:02.358]Importednewblockheaderscount=192elapsed=865.475msnumber=192hash=723899…123390age=6y3w6d
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:02.361]Migratedancientblockscount=1elapsed=325.756?s
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:02.441]Importednewblockheaderscount=192elapsed=79.563msnumber=384hash=d3d5d5…c79cf3age=6y3w6d
[geth-67b86dfcbb-t8ppz]INFO[07-25|16:17:02.929]Importednewstateentriescount=1536elapsed=15.404msprocessed=5265pending=24216retry=0duplicate=0unexpected=0
...

如果你的 geth 没有找到 peers,请参考这篇文章:https://geth.ethereum.org/docs/interface/peer-to-peer;。

文章中解释了如何找到对等点以及如何解决连接的常见问题。

十一、终止部署

当你完成测试后,你可以终止部署。

akashtxdeploymentclose\
--node$AKASH_NODE\
--chain-id$AKASH_CHAIN_ID\
--dseq$AKASH_DSEQ\
--owner$AKASH_ACCOUNT_ADDRESS\
--fromdefault\
--gas-prices=\"0.025uakt\"--gas=\"****\"--gas-adjustment=1.15

十二、存入更多的 AKT 以供部署

如果你对部署感到满意,并不想有一天停止,你可以存入更多AKT代币到托管账户:


akashtxdeploymentdeposit\
--fromdefault\
--chain-id$AKASH_CHAIN_ID\
--node$AKASH_NODE1000000uakt\
--dseq$AKASH_DSEQ\
--gas-prices=\"0.025uakt\"--gas=\"****\"--gas-adjustment=1.15

Akash相关链接

中文链接

QQ群:http://t.cn/A6IayTx5群号:754793800
微博:https://weibo.com/akashchina
币乎:https://bihu.com/people/1117023356
币吧:https://akt.bihu.com/
推特:https://twitter.com/AkashCommunity
电报:https://t.me/akashchinatalk
语雀:https://www.yuque.com/akashnetwork/index
akash官网:https://akash.network/?lang=zh-hans

英文链接:

Twitter:https://twitter.com/akashnet_
Facebook:https://www.facebook.com/akashnw/
LinkedIn:https://www.linkedin.com/company/akash-network/
Telegram:https://t.me/AkashNW
Github:https://github.com/ovrclk


扫码关注Akash

—-

编译者/作者:Akash

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...