Skip to content

Commit 4f0f2a0

Browse files
committed
added tests for 0.6.0
1 parent e3d4cb0 commit 4f0f2a0

7 files changed

+825
-540
lines changed

get-cluster-info.js

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require('dotenv').config()
22

3-
const { options, OnChainRegistry } = require('@phala/sdk')
3+
const { options, OnChainRegistry, getClient } = require('@phala/sdk')
44
const { ApiPromise, WsProvider } = require('@polkadot/api')
55

66
const argv = require('arg')({
@@ -29,11 +29,15 @@ async function main() {
2929
connectionOptions.pruntimeURL = pruntimeURL
3030
}
3131

32-
const apiPromise = await ApiPromise.create(options({
33-
provider: new WsProvider(ws),
34-
noInitWarn: true
35-
}))
36-
const registry = await OnChainRegistry.create(apiPromise, connectionOptions)
32+
const registry = await getClient({
33+
transport: ws,
34+
...connectionOptions
35+
})
36+
// const apiPromise = await ApiPromise.create(options({
37+
// provider: new WsProvider(ws),
38+
// noInitWarn: true
39+
// }))
40+
// const registry = await OnChainRegistry.create(apiPromise, connectionOptions)
3741
const cert = await registry.getAnonymousCert()
3842

3943
console.log('Connected via', ws)

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"main": "index.js",
55
"license": "MIT",
66
"dependencies": {
7-
"@phala/sdk": "^0.5.7",
7+
"@phala/sdk": "^0.6.0-beta.2",
8+
"@polkadot/ui-keyring": "^3.6.4",
89
"arg": "^5.0.2",
910
"dotenv": "^16.0.3",
1011
"minimist": "^1.2.8",

v060-get-cluster-info.js

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
require('dotenv').config()
2+
3+
const { getClient } = require('@phala/sdk')
4+
5+
const argv = require('arg')({
6+
'--ws': String,
7+
'--clusterId': String,
8+
'--worker': String,
9+
'--pruntimeURL': String
10+
})
11+
12+
async function main() {
13+
const ws = argv['--ws'] || process.env.ENDPOINT
14+
if (!ws) {
15+
throw new Error('No ws endpoint specified')
16+
}
17+
const clusterId = argv['--clusterId']
18+
const workerId = argv['--worker']
19+
const pruntimeURL = argv['--pruntimeURL']
20+
21+
const connectionOptions = {}
22+
if (clusterId) {
23+
connectionOptions.clusterId = clusterId
24+
}
25+
if (workerId) {
26+
connectionOptions.workerId = workerId
27+
} else if (pruntimeURL) {
28+
connectionOptions.pruntimeURL = pruntimeURL
29+
}
30+
31+
const registry = await getClient({
32+
transport: ws,
33+
...connectionOptions
34+
})
35+
36+
console.log('Connected via', ws)
37+
console.log('Cluster ID:', registry.clusterId)
38+
console.log('Worker ID:', registry.remotePubkey)
39+
console.log('Worker Endpoint:', registry.pruntimeURL)
40+
41+
console.log('')
42+
43+
console.log('System Contract ID:', registry.systemContract.address.toHex())
44+
const { output: systemVersionQuery } = await registry.systemContract.q.system.version()
45+
console.log('System Contract Version:', systemVersionQuery.asOk.toJSON())
46+
47+
console.log('')
48+
49+
const loggerInfo = await registry.loggerContract.getInfo()
50+
const loggerContractInfo = await registry.phactory.getContractInfo({ contracts: [
51+
registry.loggerContract.address.toHex()
52+
]})
53+
console.log('PinkLogger Contract ID:', registry.loggerContract.address.toHex())
54+
console.log('PinkLogger Running State:', loggerContractInfo.contracts[0].sidevm.state)
55+
console.log('PinkLogger SideVM Start Time:', loggerContractInfo.contracts[0].sidevm.startTime)
56+
console.log('PinkLogger Info:', loggerInfo)
57+
58+
console.log('')
59+
60+
// const { output: jsDelegateQuery } = await registry.systemContract.query['system::getDriver'](cert.address, { cert }, 'JsDelegate')
61+
const { output: jsDelegateQuery } = await registry.systemContract.q.system.getDriver({ args: ['JsDelegate'] })
62+
console.log('JsDelegate Contract ID:', jsDelegateQuery.asOk.toHex())
63+
64+
console.log('')
65+
66+
// const { output: sidevmOperationQuery } = await registry.systemContract.query['system::getDriver'](cert.address, { cert }, 'SidevmOperation')
67+
const { output: sidevmOperationQuery } = await registry.systemContract.q.system.getDriver({ args: ['SidevmOperation'] })
68+
console.log('SidevmOperation Contract ID:', sidevmOperationQuery.asOk.toHex())
69+
}
70+
71+
main().catch(console.error).finally(() => process.exit())

v060-get-cluster-info.ts

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
require('dotenv').config()
2+
3+
import type { AbstractArray } from '@polkadot/types-codec/abstract'
4+
import type { u16 } from '@polkadot/types-codec'
5+
import { getClient, type GetClientOptions } from '@phala/sdk'
6+
7+
const argv = require('arg')({
8+
'--ws': String,
9+
'--clusterId': String,
10+
'--worker': String,
11+
'--pruntimeURL': String
12+
})
13+
14+
async function main() {
15+
const ws = argv['--ws'] || process.env.ENDPOINT
16+
if (!ws) {
17+
throw new Error('No ws endpoint specified')
18+
}
19+
const clusterId = argv['--clusterId']
20+
const workerId = argv['--worker']
21+
const pruntimeURL = argv['--pruntimeURL']
22+
23+
const connectionOptions: Partial<GetClientOptions> = {}
24+
if (clusterId) {
25+
connectionOptions.clusterId = clusterId
26+
}
27+
if (workerId) {
28+
connectionOptions.workerId = workerId
29+
} else if (pruntimeURL) {
30+
connectionOptions.pruntimeURL = pruntimeURL
31+
}
32+
33+
const registry = await getClient({
34+
transport: ws,
35+
...connectionOptions
36+
})
37+
38+
console.log('Connected via', ws)
39+
console.log('Cluster ID:', registry.clusterId)
40+
console.log('Worker ID:', registry.remotePubkey)
41+
console.log('Worker Endpoint:', registry.pruntimeURL)
42+
43+
console.log('')
44+
45+
if (registry.systemContract) {
46+
console.log('System Contract ID:', registry.systemContract.address.toHex())
47+
const { output: systemVersionQuery } = await registry.systemContract.q.system.version<AbstractArray<u16>>()
48+
console.log('System Contract Version:', systemVersionQuery.asOk.toJSON())
49+
console.log('')
50+
51+
if (registry.loggerContract) {
52+
const loggerInfo = await registry.loggerContract.getInfo()
53+
const loggerContractInfo = await registry.phactory.getContractInfo({ contracts: [
54+
registry.loggerContract.address.toHex()
55+
]})
56+
console.log('PinkLogger Contract ID:', registry.loggerContract.address.toHex())
57+
console.log('PinkLogger Running State:', loggerContractInfo.contracts?.[0]?.sidevm?.state)
58+
console.log('PinkLogger SideVM Start Time:', loggerContractInfo.contracts?.[0]?.sidevm?.startTime)
59+
console.log('PinkLogger Info:', loggerInfo)
60+
console.log('')
61+
}
62+
63+
// const { output: jsDelegateQuery } = await registry.systemContract.query['system::getDriver'](cert.address, { cert }, 'JsDelegate')
64+
const { output: jsDelegateQuery } = await registry.systemContract.q.system.getDriver({ args: ['JsDelegate'] })
65+
console.log('JsDelegate Contract ID:', jsDelegateQuery.asOk.toHex())
66+
67+
console.log('')
68+
69+
// const { output: sidevmOperationQuery } = await registry.systemContract.query['system::getDriver'](cert.address, { cert }, 'SidevmOperation')
70+
const { output: sidevmOperationQuery } = await registry.systemContract.q.system.getDriver({ args: ['SidevmOperation'] })
71+
console.log('SidevmOperation Contract ID:', sidevmOperationQuery.asOk.toHex())
72+
}
73+
}
74+
75+
main().catch(console.error).finally(() => process.exit())

v060-upload.js

+128
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
require('dotenv').config()
2+
3+
const fs = require('fs')
4+
const { signAndSend, signCertificate, OnChainRegistry, options, PinkCodePromise, KeyringPairProvider } = require('@phala/sdk')
5+
const { ApiPromise, Keyring, WsProvider } = require('@polkadot/api')
6+
const BN = require('bn.js')
7+
8+
async function main() {
9+
const endpoint = process.env.ENDPOINT
10+
const account = process.env.POLKADOT_ACCOUNT
11+
if (!endpoint || !account) {
12+
console.log('Please create your own .env file with `ENDPOINT` and `POLKADOT_ACCOUNT`.')
13+
return process.exit(1)
14+
}
15+
const targetFile = 'abis/fat_badges.contract'
16+
// const targetFile = process.argv[2]
17+
// if (!endpoint || !targetFile) {
18+
// console.log('Usage: node upload.js [path/to/yours.contract]')
19+
// return process.exit(1)
20+
// }
21+
if (!fs.existsSync(targetFile)) {
22+
console.log(`${targetFile} not exists.`)
23+
return process.exit(1)
24+
}
25+
const contractFile = JSON.parse(fs.readFileSync(targetFile))
26+
27+
// Initialization
28+
console.log('Connecting to', endpoint, '...')
29+
const provider = new WsProvider(endpoint)
30+
const api = await ApiPromise.create(options({ provider, noInitWarn: true }))
31+
console.log('Connected.')
32+
33+
const keyring = new Keyring({ type: 'sr25519' })
34+
const user = pair = keyring.addFromUri(process.env.POLKADOT_ACCOUNT)
35+
const accountInfo = await api.query.system.account(user.address)
36+
const free = accountInfo.data.free.div(new BN(1e10)) / 100
37+
if (free < 20) {
38+
console.log('Not enough balance. Please transfer some tokens not less then 20 PHA to', user.address)
39+
return process.exit(1)
40+
}
41+
console.log(`Account ${user.address} has ${free} PHA.`)
42+
43+
const phatRegistry = await OnChainRegistry.create(api)
44+
45+
const clusterId = phatRegistry.clusterId
46+
// const clusterInfo = phatRegistry.clusterInfo
47+
const pruntimeURL = phatRegistry.pruntimeURL
48+
console.log('Cluster ID:', clusterId)
49+
console.log('Pruntime Endpoint URL:', pruntimeURL)
50+
51+
const balance = await phatRegistry.getClusterBalance(user.address)
52+
console.log('Cluster Balance:', balance.total.toPrimitive() / 1e12, balance.free.toPrimitive() / 1e12)
53+
54+
if ((balance.free.toPrimitive() / 1e12) < 500) {
55+
console.log('Transfer to cluster...')
56+
try {
57+
await signAndSend(phatRegistry.transferToCluster(user.address, 1e12 * 500), user)
58+
} catch (err) {
59+
console.log(`Transfer to cluster failed: ${err}`)
60+
// console.error(err)
61+
return process.exit(1)
62+
}
63+
}
64+
65+
const cert = await signCertificate({ pair })
66+
///
67+
/// All prepare conditions ready.
68+
///
69+
70+
//
71+
// Step 1: Upload with PinkCodePromise
72+
//
73+
console.log('Upload codes...')
74+
const codePromise = new PinkCodePromise(api, phatRegistry, contractFile, contractFile.source.wasm)
75+
const uploadResult = await signAndSend(codePromise.tx.new(), user)
76+
// await uploadResult.waitFinalized(user, cert)
77+
await uploadResult.waitFinalized()
78+
console.log('Code ready in cluster.')
79+
80+
//
81+
// Step 2: instantiate with PinkBlueprintPromise
82+
//
83+
console.log('Instantiating...')
84+
const instantiateResult = await uploadResult.blueprint.send.new({ pair, cert, address: cert.address })
85+
await instantiateResult.waitFinalized()
86+
87+
const { contractId, contract } = instantiateResult
88+
console.log('Contract uploaded & instantiated: ', contractId)
89+
90+
//
91+
// Step 3: adjust staking for the contract (optional)
92+
//
93+
console.info(`Auto staking to the contract...`);
94+
await signAndSend(api.tx.phalaPhatTokenomic.adjustStake(contractId, 1e10), user)
95+
96+
//
97+
// New in v0.6.x: bind provider & proxy based flavor.
98+
//
99+
contract.provider = new KeyringPairProvider(api, pair)
100+
101+
//
102+
// query test.
103+
//
104+
const old_call = await contract.query.getTotalBadges(user.address, { cert })
105+
const new_call = await contract.q.getTotalBadges()
106+
console.log('total:', old_call.output.toJSON(), new_call.output.toJSON(), old_call.output.toJSON() === new_call.output.toJSON())
107+
108+
//
109+
// trx with auto-deposit test.
110+
//
111+
const name = `Badge${new Date().getTime()}`
112+
// const result = await contract.send.newBadge({ pair, cert, address: cert.address }, name)
113+
const result = await contract.exec.newBadge({ args: [name] })
114+
await result.waitFinalized()
115+
console.log('trx submited with nonce:', result.nonce)
116+
117+
//
118+
// query data after trx.
119+
//
120+
// const { output: after } = await contract.query.getTotalBadges(pair.address, { cert })
121+
const { output: after } = await contract.q.getTotalBadges()
122+
console.log('total:', after.toJSON())
123+
}
124+
125+
main().then(() => process.exit(0)).catch(err => {
126+
console.error(err)
127+
process.exit(1)
128+
})

0 commit comments

Comments
 (0)