如何使用colonyJS连接到网络,创建令牌
本文将向您展示如何使用colonyJS连接到网络,创建令牌,创建殖民地和进行付款。我们将使用goerli
测试网络,因此在开始之前确保您拥有带有一些测试ether的以太坊钱包。如果您从未创建过以太坊钱包,请查看此文章。要获得一些测试以太坊,您可以使用Goerli Authenticated Faucet。
注意:如果您希望在本地执行此操作,请查看本地安装程序,并在设置了本地环境后返回此处。您将需要使用第一个ganache测试帐户的私钥并在方法中更改goerli
为。local
getNetworkClient
最初设定
先决条件
对于此示例,您将需要以下内容:
- 节点
>=10.12.0
- 纱
>=1.12.0
项目目录
首先,打开终端并移动到项目目录。您可以创建新项目或使用现有项目。如果您创建一个新项目,则需要运行yarn init
。
注意:如果您使用的是使用npm
或希望使用的现有项目,请npm
随意这样做,请记住,您需要在本示例中提供的说明中替换yarn
命令npm
命令。
安装
对于此示例,您将需要以下包:
@colony/colony-js-client
@colony/purser-software
web3-utils
使用以下命令安装软件包:
yarn add @colony/colony-js-client @colony/purser-software web3-utils
示例脚本
您将创建一个简单的Node脚本。该脚本将运行必要的步骤以连接到网络,创建令牌,创建殖民地并进行付款。可以在colony-starter包中找到使用相同方法的工作示例。
colony.js
在项目的根目录中创建一个文件并添加以下代码:
const { getNetworkClient } = require('@colony/colony-js-client');
const { open } = require('@colony/purser-software');
const { BN } = require('web3-utils');
(async () => {
// Step 1: Open钱包
// Step 2: Get Network Client
// Step 3: Create代币
// Step 4: Create Colony
// Step 5: Get Colony Client
// Step 6: Mint代币
// Step 7: Claim Colony Funds
// Step 8: Add Payment
// Step 9: Move Funds
// Step 10: Finalize Payment
// Step 11: Claim Payment
})()
.then(() => process.exit())
.catch(error => console.error(error));
注意:如果更改输入值并遇到错误,则无需再次调用每个方法。例如,如果amount
在步骤6中创建令牌时提供无效,则您将拥有令牌和殖民地,因此您可以注释掉步骤3和4并在呼叫时使用您的殖民地址getColonyClientByAddress
。
第1步:打开钱包
首先,您需要一个以太坊钱包的实例,您可以通过追踪软件获得。我们建议您使用用于测试的钱包。
在下面添加以下代码// Step 1: Open钱包
:
// Get a wallet instance
const wallet = await open({
privateKey: process.env.PRIVATE_KEY,
});
// Check out the logs to see the wallet address
console.log('钱包Address:', wallet.address);
第2步:获取网络客户端
接下来,您将需要获取网络客户端的实例。网络客户端将允许您调用诸如createToken
和之类的方法createColony
。
在下面添加以下代码// Step 2: Get Network Client
:
// Get a network client instance
const networkClient = await getNetworkClient('goerli', wallet);
// Check out the logs to see the network address
console.log('Network Address:', networkClient.contract.address);
第3步:创建令牌
每个殖民地都有一个内部令牌,用于计算殖民地内的声誉。内部令牌可以是任何ERC20令牌,但在创建殖民地后无法更改。下一步将使用我们的标准colonyToken合约创建令牌。
在下面添加以下代码// Step 3: Create代币
:
// Create a token
const createTokenTransaction = await networkClient.createToken.send({
name: 'Token',
symbol: 'TKN',
decimals: 18,
});
// Set the token address
const tokenAddress = createTokenTransaction.meta.receipt.contractAddress;
// Check out the logs to see the token address
console.log('Token Address: ', tokenAddress);
第4步:创建殖民地
现在你有一个令牌,你可以创建一个殖民地殖民地是一个智能合约,将管理和管理您的项目,社区,组织或任何您认为合适的东西。
在下面添加以下代码// Step 4: Create Colony
:
// Create a colony
const createColonyResponse = await networkClient.createColony.send({
tokenAddress,
});
// Set the colony address
const colonyAddress = createColonyResponse.eventData.colonyAddress;
// Check out the logs to see the colony address
console.log('Colony Address:', colonyAddress);
第5步:获取Colony客户端
在上一步中,您将使用网络客户端的实例来创建令牌和殖民地,但现在您需要调用特定于您的殖民地的方法,这将需要殖民地客户端。
在下面添加以下代码// Step 5: Get Colony Client
:
// Get a colony client instance
const colonyClient = await networkClient.getColonyClientByAddress(colonyAddress);
注意:只是一个友好的提醒。如果你直接跳到了和开始运行的例子中,你不需要调用createToken
和createColony
每次运行该脚本。您可以使用已创建的令牌和殖民地,并更新此方法以使用您的殖民地地址。
第6步:薄荷代币
为了资助您的殖民地内的付款,您首先需要填写一些代币。如果在调用时未更改输入createToken
,18
则为令牌指定了小数,则以下内容amount
将等同于1
令牌。
在下面添加以下代码// Step 6: Mint代币
:
// Mint tokens
await colonyClient.tokenClient.mint.send({
address: colonyAddress,
amount: new BN('1000000000000000000'),
});
console.log('Tokens minted!');
第7步:索取殖民地资金
大你已经铸造了你的第一个令牌,但在你可以在你的殖民地使用它之前,你需要申请它。声称的殖民地资金将把殖民地合约所拥有的任何代币添加到与殖民地的根域相关联的资金矿池中,这也将确保这些资金的可用性。
在下面添加以下代码// Step 7: Claim Colony Funds
:
// Claim colony funds
await colonyClient.claimColonyFunds.send({
token: tokenAddress,
});
console.log('Colony funds claimed!');
第8步:添加付款
现在您的殖民地的根域中有可用的资金,您可以为您的殖民地内的域,任务和付款提供资金。此示例中的目标是进行付款,因此下一步是向您的殖民地添加付款。
您将使用您的钱包地址作为收件人,您可以证明这是您为建立殖民地所付出的所有辛勤工作的奖励。您还将使用您指定的令牌的地址作为您的殖民地的原生令牌和根域的ID,以便您在殖民地的根级别获得声誉。
在下面添加以下代码// Step 8: Add Payment
:
// Add a payment
const addPaymentResponse = await colonyClient.addPayment.send({
recipient: wallet.address,
token: tokenAddress,
amount: new BN('1000000000000000000'),
domainId: 1,
});
// Set payment id and pot id
const { paymentId, potId } = addPaymentResponse.eventData;
// Check out the logs to see the payment data
console.log('Payment Data:', { paymentId, potId });
第9步:移动资金
接下来,您需要通过将资金从集团的资金矿池转移到支付的资金矿池来为您的付款提供资金。殖民地内的每笔付款都有自己的资金矿池,以确保为该付款获得资金。
在下面添加以下代码// Step 9: Move Funds
:
// Move funds between funding pots
await colonyClient.moveFundsBetweenPots.send({
fromPot: 1,
toPot: potId,
amount: new BN('1000000000000000000'),
token: tokenAddress,
});
console.log('Funds moved to payment pot!');
第10步:完成付款
现在您的付款已经获得资金,您可以最终确定。如果付款金额在与付款相关联的资金矿池中可用,则只能最终确定付款。还有其他方法可用于更新您的付款,但一旦付款最终确定,您将无法再续订,收件人也可以申请付款。
在下面添加以下代码// Step 10: Finalize Payment
:
// Finalize a payment
await colonyClient.finalizePayment.send({ paymentId });
console.log('Payment finalized!');
第11步:索赔付款
嗬你所有的努力都得到了回报。是时候申请付款了声明您的付款会将付款金额转移到您的钱包,并在您的殖民地内获得声誉奖励。
在下面添加以下代码// Step 11: Claim Payment
:
// Claim a payment
await colonyClient.claimPayment.send({
paymentId,
token: tokenAddress,
});
console.log('Payment claimed!');
执行脚本
您现在拥有连接到网络,创建令牌,创建殖民地和进行付款所需的所有步骤。现在只需使用PRIVATE_KEY
并node colony
在终端中运行您的私钥作为环境变量。
PRIVATE_KEY=<private-key> node colony
恭喜您创建了第一个殖民地并进行了第一笔付款。殖民地都是关于合作和殖民地与一个只为自己付款的成员并不是一个非常有吸引力的殖民地,其他人加入,所以你应该寻找一些合作者并奖励他们一些付款,然后再支付你自己的“努力工作”。