@leofcoin/chain 1.4.22 → 1.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/exports/chain.js +1071 -0
  2. package/exports/node.js +23 -0
  3. package/exports/typings/chain.d.ts +83 -0
  4. package/exports/typings/config/config.d.ts +1 -0
  5. package/exports/typings/config/main.d.ts +5 -0
  6. package/exports/typings/config/protocol.d.ts +6 -0
  7. package/exports/typings/contract.d.ts +29 -0
  8. package/exports/typings/fee/config.d.ts +4 -0
  9. package/exports/typings/machine.d.ts +26 -0
  10. package/exports/typings/node.d.ts +9 -0
  11. package/exports/typings/protocol.d.ts +4 -0
  12. package/exports/typings/state.d.ts +5 -0
  13. package/exports/typings/transaction.d.ts +47 -0
  14. package/exports/typings/typer.d.ts +6 -0
  15. package/package.json +12 -6
  16. package/CHANGELOG.md +0 -14
  17. package/demo/index.html +0 -25
  18. package/examples/contracts/token.js +0 -7
  19. package/plugins/bundle.js +0 -18
  20. package/src/chain.js +0 -716
  21. package/src/config/config.js +0 -14
  22. package/src/config/main.js +0 -4
  23. package/src/config/protocol.js +0 -5
  24. package/src/contract.js +0 -52
  25. package/src/fee/config.js +0 -3
  26. package/src/machine.js +0 -215
  27. package/src/node.js +0 -24
  28. package/src/protocol.js +0 -4
  29. package/src/state.js +0 -31
  30. package/src/transaction.js +0 -234
  31. package/src/type.index.d.ts +0 -21
  32. package/src/typer.js +0 -19
  33. package/test/chain.js +0 -120
  34. package/test/contracts/token.js +0 -40
  35. package/test/create-genesis.js +0 -66
  36. package/test/index.js +0 -1
  37. package/tsconfig.js +0 -15
  38. package/workers/block-worker.js +0 -40
  39. package/workers/machine-worker.js +0 -219
  40. package/workers/pool-worker.js +0 -28
  41. package/workers/transaction-worker.js +0 -20
  42. package/workers/workers.js +0 -9
package/test/chain.js DELETED
@@ -1,120 +0,0 @@
1
-
2
- (async () => {
3
- globalThis.DEBUG = true
4
- const Chain = await import('./../src/chain.js');
5
- const Node = await import('./../src/node.js');
6
- let imp = await import('../../networks/networks.js')
7
- const networks = imp.default
8
- console.log(networks.leofcoin.peach);
9
- const node = await new Node.default({
10
- network: 'leofcoin:peach',
11
- networkName: 'leofcoin:peach',
12
- networkVersion: 'peach',
13
- stars: networks.leofcoin.peach.stars
14
- })
15
- const chain = await new Chain.default()
16
- let start
17
- //
18
- // await chain.deleteAll()
19
- // return
20
- // try {
21
- // const contract = await chain.utils.read('./dist/native.js')
22
- // const address = await chain.deployContract(peernet.Buffer.from(`return ${contract.toString().replace(/export{([A-Z])\w+ as default}/g, '')}`))
23
- // console.log(address);
24
- // } catch (e) {
25
- // console.log(e);
26
- // } finally {
27
- //
28
- // }
29
- // '5xdacigaguxg3yjllehp65htk32ha3sztlexxrrhmviobgibz6dt6hkxfu'
30
- console.log(peernet.selectedAccount);
31
- await chain.participate(peernet.selectedAccount)
32
- console.log(peernet.selectedAccount);
33
- const job = async () => {
34
- // setTimeout(async () => {
35
- let tx
36
- // try {
37
- // tx = await chain.createTransaction(chain.nativeToken, 'grantRole', [peernet.selectedAccount, 'MINT'])
38
- // await tx.wait()
39
-
40
- // } catch (e) {
41
- // console.log({e});
42
- // }
43
-
44
- // try {
45
- // tx = await chain.createTransaction(chain.nativeToken, 'mint', [peernet.selectedAccount, chain.utils.parseUnits('100000000000000').toString()])
46
-
47
- // await tx.wait()
48
- // } catch (e) {
49
- // console.log({e});
50
- // }
51
- // return
52
- let nonce = await chain.getNonce(peernet.selectedAccount)
53
- console.log({nonce});
54
- let balances = await chain.balances
55
- console.log(`balance for ${Object.keys(balances)[0]}:${chain.utils.formatUnits(balances[Object.keys(balances)[0]]).toString()}`);
56
- console.log(`balance for ${Object.keys(balances)[1]}:${chain.utils.formatUnits(balances[Object.keys(balances)[1]]).toString()}`);
57
- // return
58
- let promises = []
59
- // nonce += 1
60
- for (let i = 0; i < 10; i++) {
61
- // contract , method, from, to, amount, (optional) nonce
62
- nonce += 1
63
- promises.push(chain.createTransaction(chain.nativeToken, 'transfer', [peernet.selectedAccount, '6zqut21djrRNJAniaTByovGhnBGs5h9wfkP35mzjZkEBZwnQVo', chain.utils.parseUnits('100').toString()], nonce))
64
- }
65
- promises = await Promise.allSettled(promises)
66
- promises = await Promise.allSettled(promises.map(({value}) => value.wait))
67
-
68
- console.log(`${(new Date().getTime() - start) / 1000} s`);
69
-
70
- balances = await chain.balances
71
- console.log(`balance for ${Object.keys(balances)[0]}:${chain.utils.formatUnits(balances[Object.keys(balances)[0]]).toString()}`);
72
- console.log(`balance for ${Object.keys(balances)[1]}:${chain.utils.formatUnits(balances[Object.keys(balances)[1]]).toString()}`);
73
- // return
74
- // // setTimeout(async () => {
75
- promises = []
76
-
77
- // nonce += 1
78
- for (let i = 0; i < 100; i++) {
79
- // contract , method, from, to, amount, (optional) nonce
80
-
81
- nonce += 1
82
- promises.push(chain.createTransaction(chain.nativeToken, 'transfer', [peernet.selectedAccount, '6zqut21djrRNJAniaTByovGhnBGs5h9wfkP35mzjZkEBZwnQVo', chain.utils.parseUnits('100').toString()], nonce))
83
- }
84
- promises = await Promise.allSettled(promises)
85
- promises = await Promise.allSettled(promises.map(({value}) => value.wait))
86
- balances = await chain.balances
87
- console.log(`balance for ${Object.keys(balances)[0]}:${chain.utils.formatUnits(balances[Object.keys(balances)[0]]).toString()}`);
88
- console.log(`balance for ${Object.keys(balances)[1]}:${chain.utils.formatUnits(balances[Object.keys(balances)[1]]).toString()}`);
89
-
90
- promises = []
91
-
92
- // nonce += 1
93
- for (let i = 0; i < 1000; i++) {
94
- // contract , method, from, to, amount, (optional) nonce
95
-
96
- nonce += 1
97
- promises.push(chain.createTransaction(chain.nativeToken, 'transfer', [peernet.selectedAccount, '6zqut21djrRNJAniaTByovGhnBGs5h9wfkP35mzjZkEBZwnQVo', chain.utils.parseUnits('100').toString()], nonce))
98
- }
99
- promises = await Promise.allSettled(promises)
100
- promises = await Promise.allSettled(promises.map(({value}) => value.wait))
101
- balances = await chain.balances
102
- console.log(`balance for ${Object.keys(balances)[0]}:${chain.utils.formatUnits(balances[Object.keys(balances)[0]]).toString()}`);
103
- console.log(`balance for ${Object.keys(balances)[1]}:${chain.utils.formatUnits(balances[Object.keys(balances)[1]]).toString()}`);
104
- // }, 10000);
105
-
106
- // job()
107
- // }, 5000);
108
- }
109
-
110
- // setTimeout(function () {
111
- // start = new Date().getTime()
112
- // console.log(peernet.connections);
113
- // }, 10000);
114
- try {
115
- job()
116
- } catch (e) {
117
- console.warn(e);
118
- }
119
- return peernet
120
- })()
@@ -1,40 +0,0 @@
1
- const test = require('tape')
2
-
3
- const Token = require('./../../dist/token');
4
-
5
- class TestToken extends Token {
6
- constructor() {
7
- super('token', 'TKN')
8
- }
9
- }
10
-
11
-
12
- // const token = new TestToken()
13
-
14
- test("can't access private", tape => {
15
- tape.plan(3)
16
- token.holders = 5
17
- token.balances[0] = 100
18
- token.symbol = 'TTT'
19
- console.log(token.symbol);
20
- tape.ok(token.symbol === 'TKN', 'symbol')
21
- tape.ok(Object.keys(token.balances).length === 0, 'balances')
22
- tape.ok(token.holders === 0, 'holders')
23
- })
24
-
25
- // test("transfer", tape => {
26
- // tape.plan(1)
27
- // console.log(token.balances);
28
- // try {
29
- // token.transfer('0', '1', 100)
30
- // } catch (e) {
31
- // console.log(e);
32
- // } finally {
33
- //
34
- // }
35
- // console.log(token.balances);
36
- //
37
- // tape.ok(token.balances[1] === 100)
38
- // })
39
-
40
- // console.log(new NativeToken());
@@ -1,66 +0,0 @@
1
-
2
- console.log('run');
3
-
4
- (async () => {
5
- console.log('run');
6
- const {promisify} = require('util')
7
- const read = promisify(require('fs').readFile)
8
- const write = promisify(require('fs').writeFile)
9
- const {join} = require('path')
10
- console.log('t');
11
- const Chain = require('./../dist/chain');
12
- console.log(Chain);
13
- const Node = require('./../dist/node');
14
- console.log(Node);
15
- console.log(Chain);
16
- const node = await new Node()
17
- console.log(node);
18
- const chain = await new Chain()
19
- console.log(chain);
20
- const createMessage = async (src, params = []) => {
21
- const contract = await read(src)
22
- return chain.createContractMessage(peernet.id, `return ${contract.toString().replace(/export{([A-Z])\w+ as default}/g, '')}`, params)
23
- }
24
- const factory = await createMessage('./dist/contracts/factory.js')
25
- console.log(factory);
26
- if (!await contractStore.has(factory.hash)) {
27
- await contractStore.put(factory.hash, factory.encoded)
28
- }
29
-
30
- const nativeToken = await createMessage('./dist/contracts/nativeToken.js')
31
- if (!await contractStore.has(nativeToken.hash)) {
32
- await contractStore.put(nativeToken.hash, nativeToken.encoded)
33
- }
34
-
35
-
36
- const validators = await createMessage('./dist/contracts/validators.js', [nativeToken.hash])
37
-
38
- if (!await contractStore.has(validators.hash)) {
39
- await contractStore.put(validators.hash, validators.encoded)
40
- }
41
-
42
-
43
- const nameService = await createMessage('./dist/contracts/nameService.js', [factory.hash, nativeToken.hash, validators.hash, BigNumber.from('1000')])
44
-
45
- if (!await contractStore.has(nameService.hash)) {
46
- await contractStore.put(nameService.hash, nameService.encoded)
47
- }
48
- const addresses = {
49
- contractFactory: factory.hash,
50
- nativeToken: nativeToken.hash,
51
- nameService: nameService.hash,
52
- validators: validators.hash
53
- }
54
-
55
-
56
-
57
- const bytecodes = {
58
- contractFactory: await factory.toString(),
59
- nativeToken: await nativeToken.toString(),
60
- nameService: await nameService.toString(),
61
- validators: await validators.toString()
62
- }
63
-
64
- await write(join(process.cwd(), 'src/addresses.json'), JSON.stringify(addresses, null, '\t'))
65
- await write(join(process.cwd(), 'src/bytecodes.json'), JSON.stringify(bytecodes, null, '\t'))
66
- })()
package/test/index.js DELETED
@@ -1 +0,0 @@
1
- import './chain.js'
package/tsconfig.js DELETED
@@ -1,15 +0,0 @@
1
- export default {
2
-
3
- "esModuleInterop": true,
4
- 'allowSyntheticDefaultImports': true,
5
- "compilerOptions": {
6
- "outDir": "./dist",
7
- "esModuleInterop": true,
8
- 'allowSyntheticDefaultImports': true,
9
- "allowJs": true,
10
- "target": "es11"
11
- },
12
- "include": [
13
- "./src/**/*"
14
- ]
15
- }
@@ -1,40 +0,0 @@
1
- import { BlockMessage } from './../../messages/src/messages.js'
2
- import { formatBytes, BigNumber } from './../../utils/src/utils.js'
3
-
4
- import EasyWorker from '@vandeurenglenn/easy-worker'
5
-
6
- const worker = new EasyWorker()
7
-
8
- globalThis.BigNumber = BigNumber
9
-
10
- globalThis.peernet = globalThis.peernet || {}
11
- globalThis.contracts = {}
12
-
13
- const run = async (blocks) => {
14
- blocks = await Promise.all(blocks.map(block => new BlockMessage(block)))
15
- blocks = blocks.sort((a, b) => a.decoded.timestamp - b.decoded.timestamp)
16
-
17
- blocks = await Promise.all(blocks.map(block => new Promise(async (resolve, reject) => {
18
- // todo: tx worker or nah?
19
- const size = block.encoded.length || block.encoded.byteLength
20
- console.log(`loaded block: ${await block.hash} @${block.decoded.index} ${formatBytes(size)}`);
21
- resolve(block)
22
- })))
23
- return blocks
24
- }
25
-
26
- const tasks = async blocks => {
27
- globalThis.peernet.codecs = {
28
- 'block-message': {
29
- codec: parseInt('626d', 16),
30
- hashAlg: 'keccak-256'
31
- }
32
- }
33
-
34
- blocks = await run(blocks)
35
- worker.postMessage(blocks)
36
- }
37
-
38
-
39
- worker.onmessage(data => tasks(data))
40
-
@@ -1,219 +0,0 @@
1
- import { BlockMessage, ContractMessage } from './../../messages/src/messages.js'
2
- import { formatBytes, BigNumber } from './../../utils/src/utils.js'
3
- import bytecodes from './../../lib/src/bytecodes.json' assert {type: 'json'}
4
- import EasyWorker from '@vandeurenglenn/easy-worker'
5
- const worker = new EasyWorker()
6
-
7
- const contractFactoryMessage = bytecodes.contractFactory
8
- const nativeTokenMessage = bytecodes.nativeToken
9
- const nameServiceMessage = bytecodes.nameService
10
- const validatorsMessage = bytecodes.validators
11
-
12
- globalThis.BigNumber = BigNumber
13
-
14
- globalThis.peernet = globalThis.peernet || {}
15
- globalThis.contracts = {}
16
-
17
- const unique = arr => arr.filter((el, pos, arr) => {
18
- return arr.indexOf(el) == pos;
19
- })
20
-
21
- const get = (contract, method, params) => {
22
- let result
23
- if (params?.length > 0) {
24
- result = contracts[contract][method](...params)
25
- } else {
26
- result = contracts[contract][method]
27
- }
28
- return result
29
- }
30
-
31
- const runContract = async ({decoded, hash, encoded}) => {
32
- const params = decoded.constructorParameters
33
- try {
34
-
35
- const func = new Function(decoded.contract)
36
- const Contract = func()
37
-
38
- globalThis.msg = createMessage(decoded.creator)
39
- contracts[hash] = await new Contract(...params)
40
- worker.postMessage({
41
- type: 'debug',
42
- messages: [
43
- `loaded contract: ${hash}`,
44
- `size: ${formatBytes(encoded.length)}`
45
- ]
46
- })
47
- } catch (e) {
48
- console.log(e);
49
- worker.postMessage({
50
- type: 'contractError',
51
- hash: await contractMessage.hash
52
- })
53
- }
54
- }
55
-
56
- const execute = async (contract, method, params) => {
57
- try {
58
- let result
59
- // don't execute the method on a proxy
60
- if (contracts[contract].fallback) {
61
- result = await contracts[contract].fallback(method, params)
62
- } else {
63
- result = await contracts[contract][method](...params)
64
- }
65
- // state.put(result)
66
- return result
67
- } catch (e) {
68
- throw e
69
- }
70
- }
71
-
72
-
73
- const createMessage = (sender = globalThis.peerid) => {
74
- return {
75
- sender,
76
- call: execute,
77
- staticCall: get
78
- }
79
- }
80
-
81
- const _init = async ({ contracts, blocks, peerid })=> {
82
-
83
- globalThis.peernet.codecs = {
84
- 'contract-message': {
85
- codec: parseInt('63636d', 16),
86
- hashAlg: 'keccak-256'
87
- },
88
- 'transaction-message': {
89
- codec: parseInt('746d', 16),
90
- hashAlg: 'keccak-256'
91
- },
92
- 'block-message': {
93
- codec: parseInt('626d', 16),
94
- hashAlg: 'keccak-256'
95
- }
96
- }
97
-
98
- globalThis.peerid = peerid
99
- contracts = [
100
- contractFactoryMessage,
101
- nativeTokenMessage,
102
- nameServiceMessage,
103
- validatorsMessage
104
- ]
105
-
106
- contracts = await Promise.all(contracts.map(async contract => {
107
- contract = await new ContractMessage(new Uint8Array(contract.split(',')))
108
- await runContract({decoded: contract.decoded, encoded: contract.encoded, hash: await contract.hash})
109
- return contract
110
- }))
111
-
112
- let lastBlock = {hash: '0x0'};
113
-
114
- if (blocks?.length > 0) {
115
- const _worker = await new EasyWorker('./workers/block-worker.js', {serialization: 'advanced', type: 'module' })
116
- blocks = await _worker.once([blocks[blocks.length - 1]])
117
-
118
- // blocks = unique(globalThis.blocks ? globalThis : [], blocks)
119
- // for (let i = 0; i < blocks.length; i++) {
120
-
121
- // }
122
- // for (const block of blocks) {
123
- // await Promise.all(block.decoded.transactions.map(async message => {
124
- // if (!block.loaded) {
125
- // const {from, to, method, params} = message;
126
- // globalThis.msg = createMessage(from);
127
-
128
- // await execute(to, method, params);
129
- // block.loaded = true
130
- // }
131
- // }));
132
- // }
133
-
134
- if (blocks.length > 0) {
135
- lastBlock = blocks[blocks.length - 1].decoded;
136
- lastBlock = await new BlockMessage(lastBlock);
137
-
138
- lastBlock = {
139
- ...lastBlock.decoded,
140
- hash: await lastBlock.hash
141
- };
142
- }
143
- globalThis.blocks = blocks
144
- }
145
-
146
-
147
-
148
-
149
- worker.postMessage({type: 'machine-ready', lastBlock});
150
-
151
- // worker.postMessage({blocks});
152
- }
153
-
154
- const tasks = async (e) => {
155
- const id = e.id
156
- if (e.type === 'init') {
157
- try {
158
- await _init(e.input)
159
- } catch (e) {
160
- worker.postMessage({
161
- type: 'initError',
162
- message: e.message,
163
- id
164
- })
165
- }
166
- }
167
- if (e.type === 'run') {
168
- try {
169
- const value = await runContract(e.input)
170
- worker.postMessage({
171
- type: 'response',
172
- id,
173
- value
174
- })
175
- } catch (e) {
176
- worker.postMessage({
177
- type: 'runError',
178
- message: e.message,
179
- id
180
- })
181
- }
182
- }
183
- if (e.type === 'get') {
184
- try {
185
- const value = await get(e.input.contract, e.input.method, e.input.params)
186
- worker.postMessage({
187
- type: 'response',
188
- id,
189
- value
190
- })
191
- } catch (e) {
192
- worker.postMessage({
193
- type: 'fetchError',
194
- message: e.message,
195
- id
196
- })
197
- }
198
-
199
- }
200
- if (e.type === 'execute') {
201
- try {
202
- const value = await execute(e.input.contract, e.input.method, e.input.params)
203
- worker.postMessage({
204
- type: 'response',
205
- id,
206
- value
207
- })
208
- } catch(e) {
209
- worker.postMessage({
210
- type: 'executionError',
211
- message: e.message,
212
- id
213
-
214
- })
215
- }
216
- }
217
- }
218
-
219
- worker.onmessage(data => tasks(data))
@@ -1,28 +0,0 @@
1
- import { TransactionMessage } from './../../messages/src/messages.js'
2
-
3
- import EasyWorker from '@vandeurenglenn/easy-worker'
4
-
5
- globalThis.peernet = globalThis.peernet || {}
6
- globalThis.contracts = {}
7
-
8
- const worker = new EasyWorker()
9
-
10
- const tasks = async transactions => {
11
-
12
- globalThis.peernet.codecs = {
13
- 'transaction-message': {
14
- codec: parseInt('746d', 16),
15
- hashAlg: 'keccak-256'
16
- }
17
- }
18
-
19
- transactions = await Promise.all(transactions.map(async message => {
20
- message = await new TransactionMessage(message)
21
-
22
- return {...message.decoded, hash: await message.hash, size: message.encoded.length}
23
- }))
24
-
25
- worker.postMessage(transactions)
26
-
27
- }
28
- worker.onmessage(data => tasks(data))
@@ -1,20 +0,0 @@
1
- import { TransactionMessage } from './../../messages/src/messages.js'
2
-
3
- globalThis.peernet = globalThis.peernet || {}
4
- globalThis.contracts = {}
5
-
6
- import EasyWorker from '@vandeurenglenn/easy-worker'
7
-
8
- const worker = new EasyWorker()
9
-
10
- worker.onmessage(async (transactions) => {
11
- globalThis.peernet.codecs = {
12
- 'transaction-message': {
13
- codec: parseInt('746d', 16),
14
- hashAlg: 'keccak-256'
15
- }
16
- }
17
- transactions = await Promise.all(transactions.map(async message => new TransactionMessage(message)))
18
-
19
- worker.postMessage(transactions)
20
- })
@@ -1,9 +0,0 @@
1
- import * as transactionWorker from './transaction-worker.js'
2
- import * as blockWorker from './block-worker.js'
3
- import * as poolWorker from './pool-worker.js'
4
- import * as machineWorker from './machine-worker.js'
5
-
6
- export const TransactionWorker = transactionWorker
7
- export const BlockWorker = blockWorker
8
- export const PoolWorker = poolWorker
9
- export const MachineWorker = machineWorker