@leofcoin/workers 1.3.10 → 1.3.12

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.
package/package.json CHANGED
@@ -1,25 +1,26 @@
1
- {
2
- "name": "@leofcoin/workers",
3
- "version": "1.3.10",
4
- "description": "Workers used in @leofcoin/chain",
5
- "type": "module",
6
- "exports": {
7
- ".": "./src/workers.js",
8
- "./machine-worker": "./src/machine-worker.js",
9
- "./block-worker": "./src/block-worker.js",
10
- "./transaction-worker": "./src/transaction-worker.js",
11
- "./pool-worker": "./src/pool-worker.js"
12
- },
13
- "scripts": {
14
- "test": "echo \"Error: no test specified\" && exit 1"
15
- },
16
- "keywords": [],
17
- "author": "",
18
- "license": "MIT",
19
- "dependencies": {
20
- "@leofcoin/lib": "^1.2.3",
21
- "@leofcoin/messages": "^1.2.0",
22
- "@leofcoin/utils": "^1.1.5",
23
- "@vandeurenglenn/easy-worker": "^1.0.2"
24
- }
25
- }
1
+ {
2
+ "name": "@leofcoin/workers",
3
+ "version": "1.3.12",
4
+ "description": "Workers used in @leofcoin/chain",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./src/workers.js",
8
+ "./machine-worker": "./src/machine-worker.js",
9
+ "./block-worker": "./src/block-worker.js",
10
+ "./transaction-worker": "./src/transaction-worker.js",
11
+ "./pool-worker": "./src/pool-worker.js"
12
+ },
13
+ "scripts": {
14
+ "test": "echo \"Error: no test specified\" && exit 1"
15
+ },
16
+ "keywords": [],
17
+ "author": "",
18
+ "license": "MIT",
19
+ "dependencies": {
20
+ "@leofcoin/lib": "^1.2.3",
21
+ "@leofcoin/messages": "^1.2.0",
22
+ "@leofcoin/storage": "^3.3.2",
23
+ "@leofcoin/utils": "^1.1.5",
24
+ "@vandeurenglenn/easy-worker": "^1.0.2"
25
+ }
26
+ }
@@ -1,31 +1,31 @@
1
- import { BlockMessage } from '@leofcoin/messages'
2
- import { formatBytes, BigNumber } from '@leofcoin/utils'
3
-
4
- import EasyWorker from '@vandeurenglenn/easy-worker'
5
-
6
- const worker = new EasyWorker()
7
-
8
- globalThis.BigNumber = BigNumber
9
- globalThis.contracts = {}
10
-
11
- const run = async (blocks) => {
12
- blocks = await Promise.all(blocks.map(block => new BlockMessage(block)))
13
- blocks = blocks.sort((a, b) => a.decoded.timestamp - b.decoded.timestamp)
14
-
15
- blocks = await Promise.all(blocks.map(block => new Promise(async (resolve, reject) => {
16
- // todo: tx worker or nah?
17
- const size = block.encoded.length || block.encoded.byteLength
18
- console.log(`loaded block: ${await block.hash()} @${block.decoded.index} ${formatBytes(size)}`);
19
- resolve(block)
20
- })))
21
- return blocks
22
- }
23
-
24
- const tasks = async blocks => {
25
- blocks = await run(blocks)
26
- worker.postMessage(blocks)
27
- }
28
-
29
-
30
- worker.onmessage(data => tasks(data))
31
-
1
+ import { BlockMessage } from '@leofcoin/messages'
2
+ import { formatBytes, BigNumber } from '@leofcoin/utils'
3
+
4
+ import EasyWorker from '@vandeurenglenn/easy-worker'
5
+
6
+ const worker = new EasyWorker()
7
+
8
+ globalThis.BigNumber = BigNumber
9
+ globalThis.contracts = {}
10
+
11
+ const run = async (blocks) => {
12
+ blocks = await Promise.all(blocks.map(block => new BlockMessage(block)))
13
+ blocks = blocks.sort((a, b) => a.decoded.timestamp - b.decoded.timestamp)
14
+
15
+ blocks = await Promise.all(blocks.map(block => new Promise(async (resolve, reject) => {
16
+ // todo: tx worker or nah?
17
+ const size = block.encoded.length || block.encoded.byteLength
18
+ console.log(`loaded block: ${await block.hash()} @${block.decoded.index} ${formatBytes(size)}`);
19
+ resolve(block)
20
+ })))
21
+ return blocks
22
+ }
23
+
24
+ const tasks = async blocks => {
25
+ blocks = await run(blocks)
26
+ worker.postMessage(blocks)
27
+ }
28
+
29
+
30
+ worker.onmessage(data => tasks(data))
31
+
@@ -0,0 +1,51 @@
1
+ import { BlockMessage } from '@leofcoin/messages'
2
+ import { formatBytes, BigNumber } from '@leofcoin/utils'
3
+
4
+ import EasyWorker from '@vandeurenglenn/easy-worker'
5
+ import Storage from '@leofcoin/storage'
6
+ const worker = new EasyWorker()
7
+ const logStore = new Storage('log')
8
+ await logStore.init()
9
+
10
+ declare type messageType = 'put' | 'get'
11
+
12
+ declare type message = {
13
+ type: messageType,
14
+ input: string
15
+ }
16
+
17
+ declare type messageReturn = {
18
+ type: messageType,
19
+ result?: string,
20
+ message?: string,
21
+ error?: Error
22
+ }
23
+
24
+ const handlePut = async message => {
25
+ try {
26
+ await fetch(`http://localhost:8080/log/put`, {
27
+ method: 'put',
28
+ body: message
29
+ })
30
+ } catch (error) {
31
+ worker.postMessage({ type: 'logError', message, error })
32
+ }
33
+ }
34
+
35
+ const handleGet = async message => {
36
+ try {
37
+ await fetch(`http://localhost:8080/log/get?`, {
38
+ method: 'put',
39
+ body: message
40
+ })
41
+ } catch (error) {
42
+ worker.postMessage({ type: 'logError', message, error })
43
+ }
44
+ }
45
+
46
+ worker.onmessage((message: message) => {
47
+ if (!message.type) message.type = 'put'
48
+ if (message.type === 'put') handlePut(message.input)
49
+ else handleGet(message.input)
50
+ })
51
+
@@ -1,222 +1,222 @@
1
- import { BlockMessage, ContractMessage } from '@leofcoin/messages'
2
- import { formatBytes, BigNumber } from '@leofcoin/utils'
3
- import bytecodes from '@leofcoin/lib/bytecodes' 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
- globalThis.contracts = {}
14
-
15
- const unique = arr => arr.filter((el, pos, arr) => {
16
- return arr.indexOf(el) == pos;
17
- })
18
-
19
- const has = address => {
20
- return contracts[address] ? true : false
21
- }
22
-
23
- const get = (contract, method, params) => {
24
- let result
25
- if (params?.length > 0) {
26
- result = contracts[contract][method](...params)
27
- } else {
28
- result = contracts[contract][method]
29
- }
30
- return result
31
- }
32
-
33
- const runContract = async ({decoded, hash, encoded}) => {
34
- const params = decoded.constructorParameters
35
- try {
36
-
37
- const func = new Function(new TextDecoder().decode(contract))
38
- const Contract = func()
39
-
40
- globalThis.msg = createMessage(decoded.creator)
41
- contracts[hash] = await new Contract(...params)
42
- worker.postMessage({
43
- type: 'debug',
44
- messages: [
45
- `loaded contract: ${hash}`,
46
- `size: ${formatBytes(encoded.length)}`
47
- ]
48
- })
49
- } catch (e) {
50
- console.log(e);
51
- worker.postMessage({
52
- type: 'contractError',
53
- hash: await contractMessage.hash()
54
- })
55
- }
56
- }
57
-
58
- const execute = async (contract, method, params) => {
59
- try {
60
- let result
61
- // don't execute the method on a proxy
62
- if (contracts[contract].fallback) {
63
- result = await contracts[contract].fallback(method, params)
64
- } else {
65
- result = await contracts[contract][method](...params)
66
- }
67
- // state.put(result)
68
- return result
69
- } catch (e) {
70
- throw e
71
- }
72
- }
73
-
74
-
75
- const createMessage = (sender = globalThis.peerid) => {
76
- return {
77
- sender,
78
- call: execute,
79
- staticCall: get
80
- }
81
- }
82
-
83
- const _init = async ({ contracts, blocks, peerid })=> {
84
-
85
- globalThis.peerid = peerid
86
- contracts = [
87
- contractFactoryMessage,
88
- nativeTokenMessage,
89
- nameServiceMessage,
90
- validatorsMessage
91
- ]
92
-
93
- contracts = await Promise.all(contracts.map(async contract => {
94
- contract = await new ContractMessage(new Uint8Array(contract.split(',')))
95
- await runContract({decoded: contract.decoded, encoded: contract.encoded, hash: await contract.hash()})
96
- return contract
97
- }))
98
-
99
- let lastBlock = {hash: '0x0'};
100
-
101
- if (blocks?.length > 0) {
102
- const _worker = await new EasyWorker('node_modules/@leofcoin/workers/src/block-worker.js', {serialization: 'advanced', type: 'module' })
103
- blocks = await _worker.once([blocks[blocks.length - 1]])
104
-
105
- // blocks = unique(globalThis.blocks ? globalThis : [], blocks)
106
- // for (let i = 0; i < blocks.length; i++) {
107
-
108
- // }
109
- // for (const block of blocks) {
110
- // await Promise.all(block.decoded.transactions.map(async message => {
111
- // if (!block.loaded) {
112
- // const {from, to, method, params} = message;
113
- // globalThis.msg = createMessage(from);
114
-
115
- // await execute(to, method, params);
116
- // block.loaded = true
117
- // }
118
- // }));
119
- // }
120
-
121
- if (blocks.length > 0) {
122
- lastBlock = blocks[blocks.length - 1].decoded;
123
- lastBlock = await new BlockMessage(lastBlock);
124
-
125
- lastBlock = {
126
- ...lastBlock.decoded,
127
- hash: await lastBlock.hash()
128
- };
129
- }
130
- globalThis.blocks = blocks
131
- }
132
-
133
-
134
-
135
-
136
- worker.postMessage({type: 'machine-ready', lastBlock});
137
-
138
- // worker.postMessage({blocks});
139
- }
140
-
141
- const tasks = async (e) => {
142
- const id = e.id
143
- if (e.type === 'init') {
144
- try {
145
- await _init(e.input)
146
- } catch (e) {
147
- worker.postMessage({
148
- type: 'initError',
149
- message: e.message,
150
- id
151
- })
152
- }
153
- }
154
- if (e.type === 'has') {
155
- try {
156
- const value = await has(e.input.address)
157
- worker.postMessage({
158
- type: 'response',
159
- id,
160
- value
161
- })
162
- } catch (error) {
163
- worker.postMessage({
164
- type: 'hasError',
165
- message: error.message,
166
- id
167
- })
168
- }
169
- }
170
- if (e.type === 'run') {
171
- try {
172
- const value = await runContract(e.input)
173
- worker.postMessage({
174
- type: 'response',
175
- id,
176
- value
177
- })
178
- } catch (e) {
179
- worker.postMessage({
180
- type: 'runError',
181
- message: e.message,
182
- id
183
- })
184
- }
185
- }
186
- if (e.type === 'get') {
187
- try {
188
- const value = await get(e.input.contract, e.input.method, e.input.params)
189
- worker.postMessage({
190
- type: 'response',
191
- id,
192
- value
193
- })
194
- } catch (e) {
195
- worker.postMessage({
196
- type: 'fetchError',
197
- message: e.message,
198
- id
199
- })
200
- }
201
-
202
- }
203
- if (e.type === 'execute') {
204
- try {
205
- const value = await execute(e.input.contract, e.input.method, e.input.params)
206
- worker.postMessage({
207
- type: 'response',
208
- id,
209
- value
210
- })
211
- } catch(e) {
212
- worker.postMessage({
213
- type: 'executionError',
214
- message: e.message,
215
- id
216
-
217
- })
218
- }
219
- }
220
- }
221
-
1
+ import { BlockMessage, ContractMessage } from '@leofcoin/messages'
2
+ import { formatBytes, BigNumber } from '@leofcoin/utils'
3
+ import bytecodes from '@leofcoin/lib/bytecodes' 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
+ globalThis.contracts = {}
14
+
15
+ const unique = arr => arr.filter((el, pos, arr) => {
16
+ return arr.indexOf(el) == pos;
17
+ })
18
+
19
+ const has = address => {
20
+ return contracts[address] ? true : false
21
+ }
22
+
23
+ const get = (contract, method, params) => {
24
+ let result
25
+ if (params?.length > 0) {
26
+ result = contracts[contract][method](...params)
27
+ } else {
28
+ result = contracts[contract][method]
29
+ }
30
+ return result
31
+ }
32
+
33
+ const runContract = async ({decoded, hash, encoded}) => {
34
+ const params = decoded.constructorParameters
35
+ try {
36
+
37
+ const func = new Function(new TextDecoder().decode(decoded.contract))
38
+ const Contract = func()
39
+
40
+ globalThis.msg = createMessage(decoded.creator)
41
+ contracts[hash] = await new Contract(...params)
42
+ worker.postMessage({
43
+ type: 'debug',
44
+ messages: [
45
+ `loaded contract: ${hash}`,
46
+ `size: ${formatBytes(encoded.length)}`
47
+ ]
48
+ })
49
+ } catch (e) {
50
+ console.log(e);
51
+ worker.postMessage({
52
+ type: 'contractError',
53
+ hash: await contractMessage.hash()
54
+ })
55
+ }
56
+ }
57
+
58
+ const execute = async (contract, method, params) => {
59
+ try {
60
+ let result
61
+ // don't execute the method on a proxy
62
+ if (contracts[contract].fallback) {
63
+ result = await contracts[contract].fallback(method, params)
64
+ } else {
65
+ result = await contracts[contract][method](...params)
66
+ }
67
+ // state.put(result)
68
+ return result
69
+ } catch (e) {
70
+ throw e
71
+ }
72
+ }
73
+
74
+
75
+ const createMessage = (sender = globalThis.peerid) => {
76
+ return {
77
+ sender,
78
+ call: execute,
79
+ staticCall: get
80
+ }
81
+ }
82
+
83
+ const _init = async ({ contracts, blocks, peerid })=> {
84
+
85
+ globalThis.peerid = peerid
86
+ contracts = [
87
+ contractFactoryMessage,
88
+ nativeTokenMessage,
89
+ nameServiceMessage,
90
+ validatorsMessage
91
+ ]
92
+
93
+ contracts = await Promise.all(contracts.map(async contract => {
94
+ contract = await new ContractMessage(new Uint8Array(contract.split(',')))
95
+ await runContract({decoded: contract.decoded, encoded: contract.encoded, hash: await contract.hash()})
96
+ return contract
97
+ }))
98
+
99
+ let lastBlock = {hash: '0x0'};
100
+
101
+ if (blocks?.length > 0) {
102
+ const _worker = await new EasyWorker('node_modules/@leofcoin/workers/src/block-worker.js', {serialization: 'advanced', type: 'module' })
103
+ blocks = await _worker.once([blocks[blocks.length - 1]])
104
+
105
+ // blocks = unique(globalThis.blocks ? globalThis : [], blocks)
106
+ // for (let i = 0; i < blocks.length; i++) {
107
+
108
+ // }
109
+ // for (const block of blocks) {
110
+ // await Promise.all(block.decoded.transactions.map(async message => {
111
+ // if (!block.loaded) {
112
+ // const {from, to, method, params} = message;
113
+ // globalThis.msg = createMessage(from);
114
+
115
+ // await execute(to, method, params);
116
+ // block.loaded = true
117
+ // }
118
+ // }));
119
+ // }
120
+
121
+ if (blocks.length > 0) {
122
+ lastBlock = blocks[blocks.length - 1].decoded;
123
+ lastBlock = await new BlockMessage(lastBlock);
124
+
125
+ lastBlock = {
126
+ ...lastBlock.decoded,
127
+ hash: await lastBlock.hash()
128
+ };
129
+ }
130
+ globalThis.blocks = blocks
131
+ }
132
+
133
+
134
+
135
+
136
+ worker.postMessage({type: 'machine-ready', lastBlock});
137
+
138
+ // worker.postMessage({blocks});
139
+ }
140
+
141
+ const tasks = async (e) => {
142
+ const id = e.id
143
+ if (e.type === 'init') {
144
+ try {
145
+ await _init(e.input)
146
+ } catch (e) {
147
+ worker.postMessage({
148
+ type: 'initError',
149
+ message: e.message,
150
+ id
151
+ })
152
+ }
153
+ }
154
+ if (e.type === 'has') {
155
+ try {
156
+ const value = await has(e.input.address)
157
+ worker.postMessage({
158
+ type: 'response',
159
+ id,
160
+ value
161
+ })
162
+ } catch (error) {
163
+ worker.postMessage({
164
+ type: 'hasError',
165
+ message: error.message,
166
+ id
167
+ })
168
+ }
169
+ }
170
+ if (e.type === 'run') {
171
+ try {
172
+ const value = await runContract(e.input)
173
+ worker.postMessage({
174
+ type: 'response',
175
+ id,
176
+ value
177
+ })
178
+ } catch (e) {
179
+ worker.postMessage({
180
+ type: 'runError',
181
+ message: e.message,
182
+ id
183
+ })
184
+ }
185
+ }
186
+ if (e.type === 'get') {
187
+ try {
188
+ const value = await get(e.input.contract, e.input.method, e.input.params)
189
+ worker.postMessage({
190
+ type: 'response',
191
+ id,
192
+ value
193
+ })
194
+ } catch (e) {
195
+ worker.postMessage({
196
+ type: 'fetchError',
197
+ message: e.message,
198
+ id
199
+ })
200
+ }
201
+
202
+ }
203
+ if (e.type === 'execute') {
204
+ try {
205
+ const value = await execute(e.input.contract, e.input.method, e.input.params)
206
+ worker.postMessage({
207
+ type: 'response',
208
+ id,
209
+ value
210
+ })
211
+ } catch(e) {
212
+ worker.postMessage({
213
+ type: 'executionError',
214
+ message: e.message,
215
+ id
216
+
217
+ })
218
+ }
219
+ }
220
+ }
221
+
222
222
  worker.onmessage(data => tasks(data))
@@ -1,19 +1,19 @@
1
- import { TransactionMessage } from '@leofcoin/messages'
2
-
3
- import EasyWorker from '@vandeurenglenn/easy-worker'
4
- globalThis.contracts = {}
5
-
6
- const worker = new EasyWorker()
7
-
8
- const tasks = async transactions => {
9
-
10
- transactions = await Promise.all(transactions.map(async message => {
11
- message = await new TransactionMessage(message)
12
-
13
- return {...message.decoded, hash: await message.hash(), size: message.encoded.length}
14
- }))
15
-
16
- worker.postMessage(transactions)
17
-
18
- }
19
- worker.onmessage(data => tasks(data))
1
+ import { TransactionMessage } from '@leofcoin/messages'
2
+
3
+ import EasyWorker from '@vandeurenglenn/easy-worker'
4
+ globalThis.contracts = {}
5
+
6
+ const worker = new EasyWorker()
7
+
8
+ const tasks = async transactions => {
9
+
10
+ transactions = await Promise.all(transactions.map(async message => {
11
+ message = await new TransactionMessage(message)
12
+
13
+ return {...message.decoded, hash: await message.hash(), size: message.encoded.length}
14
+ }))
15
+
16
+ worker.postMessage(transactions)
17
+
18
+ }
19
+ worker.onmessage(data => tasks(data))
@@ -1,12 +1,12 @@
1
- import { TransactionMessage } from '@leofcoin/messages'
2
- globalThis.contracts = {}
3
-
4
- import EasyWorker from '@vandeurenglenn/easy-worker'
5
-
6
- const worker = new EasyWorker()
7
-
8
- worker.onmessage(async (transactions) => {
9
- transactions = await Promise.all(transactions.map(async message => new TransactionMessage(message)))
10
-
11
- worker.postMessage(transactions)
1
+ import { TransactionMessage } from '@leofcoin/messages'
2
+ globalThis.contracts = {}
3
+
4
+ import EasyWorker from '@vandeurenglenn/easy-worker'
5
+
6
+ const worker = new EasyWorker()
7
+
8
+ worker.onmessage(async (transactions) => {
9
+ transactions = await Promise.all(transactions.map(async message => new TransactionMessage(message)))
10
+
11
+ worker.postMessage(transactions)
12
12
  })
package/src/workers.js CHANGED
@@ -1,9 +1,9 @@
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
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
9
  export const MachineWorker = machineWorker