@com-chain/jsc3l 2.0.1-rc.0 → 2.0.1-rc.10

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 (46) hide show
  1. package/build/bcRead.d.ts +8 -9
  2. package/build/bcRead.js +93 -35
  3. package/build/bcRead.js.map +1 -1
  4. package/build/bcTransaction.d.ts +2 -1
  5. package/build/bcTransaction.js +55 -76
  6. package/build/bcTransaction.js.map +1 -1
  7. package/build/config/transactions.d.ts +44 -0
  8. package/build/config/transactions.js +29 -0
  9. package/build/config/transactions.js.map +1 -0
  10. package/build/connection.js +14 -8
  11. package/build/connection.js.map +1 -1
  12. package/build/customization.js +11 -2
  13. package/build/customization.js.map +1 -1
  14. package/build/ethereum/ethFuncs.js +1 -1
  15. package/build/ethereum/ethFuncs.js.map +1 -1
  16. package/build/ethereum/etherUnits.js +5 -5
  17. package/build/ethereum/etherUnits.js.map +1 -1
  18. package/build/ethereum/uiFuncs.d.ts +1 -3
  19. package/build/ethereum/uiFuncs.js +13 -23
  20. package/build/ethereum/uiFuncs.js.map +1 -1
  21. package/build/index.d.ts +10 -6
  22. package/build/index.js +35 -21
  23. package/build/index.js.map +1 -1
  24. package/build/qr.d.ts +31 -6
  25. package/build/qr.js +32 -12
  26. package/build/qr.js.map +1 -1
  27. package/build/rest/ajaxReq.d.ts +2 -10
  28. package/build/rest/ajaxReq.js +10 -32
  29. package/build/rest/ajaxReq.js.map +1 -1
  30. package/build/type.d.ts +4 -4
  31. package/build/wallet.d.ts +7 -9
  32. package/build/wallet.js +31 -39
  33. package/build/wallet.js.map +1 -1
  34. package/package.json +3 -1
  35. package/src/bcRead.ts +108 -49
  36. package/src/bcTransaction.ts +58 -77
  37. package/src/config/transactions.ts +30 -0
  38. package/src/connection.ts +15 -7
  39. package/src/customization.ts +17 -2
  40. package/src/ethereum/ethFuncs.ts +1 -1
  41. package/src/ethereum/etherUnits.ts +5 -5
  42. package/src/ethereum/uiFuncs.ts +16 -25
  43. package/src/index.ts +50 -28
  44. package/src/qr.ts +86 -12
  45. package/src/rest/ajaxReq.ts +10 -39
  46. package/src/wallet.ts +40 -50
package/build/type.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export declare const httpMethods: readonly ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"];
2
- export declare type httpMethod = typeof httpMethods[number];
3
- export declare type coreHttpOpts = {
2
+ export type httpMethod = typeof httpMethods[number];
3
+ export type coreHttpOpts = {
4
4
  protocol: string;
5
5
  host: string;
6
6
  path: string;
@@ -10,13 +10,13 @@ export declare type coreHttpOpts = {
10
10
  data?: any;
11
11
  timeout?: number;
12
12
  };
13
- export declare type HttpRequest = (opts: coreHttpOpts) => Object;
13
+ export type HttpRequest = (opts: coreHttpOpts) => Object;
14
14
  export interface IPersistentStore {
15
15
  get(key: string, defaultValue?: string): string;
16
16
  set(key: string, value: string): void;
17
17
  del(key: string): void;
18
18
  }
19
- export declare type UrlParts = {
19
+ export type UrlParts = {
20
20
  protocol: string;
21
21
  host: string;
22
22
  port: number;
package/build/wallet.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import AjaxReq from './rest/ajaxReq';
2
+ import { SignedQR } from './qr';
2
3
  import Wallet from './ethereum/myetherwallet';
3
4
  export default abstract class MessagingWalletAbstract extends Wallet {
4
5
  abstract ajaxReq: AjaxReq;
@@ -10,7 +11,7 @@ export default abstract class MessagingWalletAbstract extends Wallet {
10
11
  };
11
12
  static createWallet(this: {
12
13
  new (): MessagingWalletAbstract;
13
- }): Promise<"REPLACED_WITH_REMOTE" | "CREATED_NEW">;
14
+ }): Promise<MessagingWalletAbstract>;
14
15
  private publishMessageKey;
15
16
  publishReqMessages(addTo: any, message: any): Promise<any>;
16
17
  ensureWalletMessageKey(): Promise<"REPLACED_WITH_REMOTE" | "CREATED_NEW">;
@@ -21,15 +22,12 @@ export default abstract class MessagingWalletAbstract extends Wallet {
21
22
  encryptWallet(password: any): {
22
23
  [k: string]: any;
23
24
  };
24
- enrollAddress(codeId: any, token: any): any;
25
+ enrollAddress(id: any, token: any): any;
25
26
  requestUnlock(): any;
26
27
  static getWalletFromPrivKeyFile(jsonStr: any, password: any): Wallet;
27
- makeSignedQRWithPubKey(objContent: any, pubKey: any): {
28
- signature: any;
29
- qrContent: string;
30
- };
31
- makeSignedQR(obj: any): {
32
- signature: any;
33
- qrContent: string;
28
+ makeSignedQRContent(obj: any, pubKey: string | null): SignedQR;
29
+ makeSignedQRFragments(obj: any, fragmentCount: number, pubKey: string | null): {
30
+ full: string;
34
31
  };
32
+ checkSignedQRFromString(qrString: string): true | "InvalidFormat" | "InvalidSignature" | "NotForYou" | "Expired";
35
33
  }
package/build/wallet.js CHANGED
@@ -1,4 +1,4 @@
1
- import ethUtil from 'ethereumjs-util';
1
+ import { checkSignedQR, makeSignedQRContent, makeSignedQRFragments } from './qr';
2
2
  import { shortenAddress, cipherMsg, decipherMsg } from './ethereum/cipher';
3
3
  import Wallet from './ethereum/myetherwallet';
4
4
  export default class MessagingWalletAbstract extends Wallet {
@@ -8,7 +8,8 @@ export default class MessagingWalletAbstract extends Wallet {
8
8
  }
9
9
  static async createWallet() {
10
10
  const wallet = new this();
11
- return wallet.ensureWalletMessageKey();
11
+ await wallet.ensureWalletMessageKey();
12
+ return wallet;
12
13
  }
13
14
  publishMessageKey() {
14
15
  const dataStr = JSON.stringify({
@@ -34,7 +35,7 @@ export default class MessagingWalletAbstract extends Wallet {
34
35
  async ensureWalletMessageKey() {
35
36
  const remoteKey = await this.ajaxReq.getMessageKey(this.getAddressString(), true);
36
37
  const walletMessageKey = this === null || this === void 0 ? void 0 : this.message_key;
37
- if (remoteKey.public_message_key !== undefined) {
38
+ if (typeof remoteKey.public_message_key !== 'undefined') {
38
39
  this.message_key = {
39
40
  pub: remoteKey.public_message_key,
40
41
  priv: remoteKey.private_message_key,
@@ -78,7 +79,7 @@ export default class MessagingWalletAbstract extends Wallet {
78
79
  const newKey = Wallet.generate(false);
79
80
  const mPub = newKey.getPublicKeyString();
80
81
  const mPriv = newKey.getPrivateKeyString();
81
- return { pub: mPub, priv: cipherMsg(this.getPublicKey(), mPriv) };
82
+ return { pub: mPub, priv: cipherMsg(this.getPublicKeyString(), mPriv) };
82
83
  }
83
84
  messageKeysFromCrypted(cipheredKey) {
84
85
  // XXXvlab: here we are converting to hex and de-converting in decipherMsg...
@@ -98,8 +99,14 @@ export default class MessagingWalletAbstract extends Wallet {
98
99
  message_key: this.message_key
99
100
  });
100
101
  }
101
- enrollAddress(codeId, token) {
102
- return this.ajaxReq.enrollAddress(codeId, this.getAddressString(), this.currencyName, token);
102
+ enrollAddress(id, token) {
103
+ return this.ajaxReq.enrollPost({
104
+ id,
105
+ token,
106
+ currency: this.currencyName,
107
+ // XXXvlab: Yes, typo is intentional here (in PHP API):
108
+ adresse: this.getAddressString(),
109
+ });
103
110
  }
104
111
  requestUnlock() {
105
112
  return this.ajaxReq.requestUnlock(this.getAddressString(), this.unlockUrl);
@@ -123,40 +130,25 @@ export default class MessagingWalletAbstract extends Wallet {
123
130
  }
124
131
  }
125
132
  //
126
- // QR Codes requires EthUtils
133
+ // QR Code helpers
127
134
  //
128
- makeSignedQRWithPubKey(objContent, pubKey) {
129
- objContent.message_key = cipherMsg(pubKey, this.messageKeysFromWallet());
130
- objContent.address = this.getAddressString();
131
- return this.makeSignedQR(objContent);
132
- }
133
- makeSignedQR(obj) {
134
- // Values expected:
135
- const { server, destinary, begin, end, viewbalance, viewoldtran, pub_key } = obj;
136
- const formatDate = (date) => `${begin.getFullYear()}/${begin.getMonth()}/${begin.getDate()}`;
137
- const objContent = Object.assign(obj, {
138
- address: this.getAddressString(),
139
- begin: formatDate(begin),
140
- end: formatDate(end)
141
- });
142
- const hash = ethUtil.sha3(JSON.stringify(objContent));
143
- const signature = ethUtil.ecsign(hash, this.privKey);
144
- return {
145
- signature,
146
- qrContent: JSON.stringify({
147
- data: objContent,
148
- signature: {
149
- v: signature.v,
150
- r: '0x' + signature.r.toString('hex'),
151
- s: '0x' + signature.s.toString('hex')
152
- }
153
- })
154
- };
135
+ makeSignedQRContent(obj, pubKey) {
136
+ return makeSignedQRContent(Object.assign(Object.assign({ server: this.currencyName, address: this.getAddressString() }, obj), pubKey && {
137
+ message_key: cipherMsg(pubKey, this.messageKeysFromWallet())
138
+ }), this.privKey);
139
+ }
140
+ makeSignedQRFragments(obj, fragmentCount, pubKey) {
141
+ return makeSignedQRFragments(this.makeSignedQRContent(obj, pubKey), fragmentCount);
142
+ }
143
+ checkSignedQRFromString(qrString) {
144
+ let qrContent;
145
+ try {
146
+ qrContent = JSON.parse(qrString);
147
+ }
148
+ catch (e) {
149
+ return 'InvalidFormat';
150
+ }
151
+ return checkSignedQR(qrContent, this.getAddressString());
155
152
  }
156
153
  }
157
- // // TODO: What to do with this validateEnrollment
158
- // public static validateEnrollment (codeId, signature) {
159
- // return this.ajaxReq.validateEnrollmentLetter(
160
- // codeId, this.currencyName, signature)
161
- // }
162
154
  //# sourceMappingURL=wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@com-chain/jsc3l",
3
- "version": "2.0.1-rc.0",
3
+ "version": "2.0.1-rc.10",
4
4
  "description": "JavaScript Com-Chain Communication Library",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -24,10 +24,12 @@
24
24
  },
25
25
  "homepage": "https://github.com/com-chain/JSC3L#readme",
26
26
  "devDependencies": {
27
+ "@0k.io/prettier": "^0.0.1",
27
28
  "@types/node": "^16.10.3",
28
29
  "@typescript-eslint/eslint-plugin": "^4.33.0",
29
30
  "@typescript-eslint/parser": "^4.33.0",
30
31
  "eslint": "^7.29.0",
32
+ "eslint-config-standard": "^16.0.3",
31
33
  "typescript": "^4.4.3"
32
34
  },
33
35
  "dependencies": {
package/src/bcRead.ts CHANGED
@@ -4,15 +4,68 @@ import AjaxReq from './rest/ajaxReq'
4
4
  import { getNakedAddress, padLeft, getDataObj } from './ethereum/ethFuncs'
5
5
 
6
6
 
7
- function getNumber (data, ratio) {
8
- const shortData = '0x' + data.slice(-12)
9
- let a = parseInt(shortData, 16)
10
7
 
11
- if (a > (34359738368 * 4096)) {
12
- a -= 68719476736 * 4096
8
+ function decodeData (abiType: string, data: string): any {
9
+ if (data.startsWith('0x')) {
10
+ data = data.slice(2)
11
+ }
12
+ if (data.length === 0) {
13
+ return null
14
+ }
15
+ let dataBuffer: Buffer
16
+ try {
17
+ dataBuffer = Buffer.from(data, 'hex')
18
+ } catch (e) {
19
+ throw new Error(
20
+ 'Invalid data provided: not an hex string')
21
+ }
22
+ if (dataBuffer.length % 32 !== 0) {
23
+ throw new Error(
24
+ 'Invalid data provided: data length is not a multiple of 32')
25
+ }
26
+ const uintData = dataBuffer.readUIntBE(0, 32)
27
+ switch (abiType) {
28
+ case 'string':
29
+ const dataLocation = uintData
30
+ if (dataLocation % 32 !== 0) {
31
+ throw new Error(
32
+ 'Invalid data provided while decoding string: ' +
33
+ 'first 32byte word is not a valid address')
34
+ }
35
+ if (dataLocation + 64 > dataBuffer.length) {
36
+ throw new Error(
37
+ 'Invalid data provided while decoding string: ' +
38
+ 'not enough data to decode length and first word at given location')
39
+ }
40
+ const dataLength = dataBuffer.readUIntBE(dataLocation, 32)
41
+ const expectedLength = Math.ceil((dataLocation + 32 + dataLength) / 32) * 32
42
+ console.log("expected:", expectedLength)
43
+ if (dataBuffer.length !== expectedLength) {
44
+ throw new Error(
45
+ 'Invalid data provided while decoding string: ' +
46
+ 'not enough data to decode advertised string')
47
+ }
48
+ const dataValue = dataBuffer.slice(dataLocation + 32, dataLocation + 32 + dataLength)
49
+ return dataValue.toString()
50
+ case 'uint':
51
+ case 'uint256':
52
+ return uintData
53
+ case 'number/100':
54
+ return (decodeData('number', data) / 100.0).toString()
55
+ case 'number':
56
+ const shortData = '0x' + data.slice(-12)
57
+ let a = parseInt(shortData, 16)
58
+
59
+ if (a > (34359738368 * 4096)) {
60
+ a -= 68719476736 * 4096
61
+ }
62
+
63
+ return a
64
+ case 'bool':
65
+ return uintData === 1
66
+ default:
67
+ throw new Error(`Unsupported ABI type: ${abiType}`)
13
68
  }
14
-
15
- return a / ratio
16
69
  }
17
70
 
18
71
 
@@ -22,13 +75,22 @@ export default abstract class BcReadAbstract {
22
75
  abstract contracts: string[]
23
76
 
24
77
  // Get Global status of the contract
25
- async getContractStatus () { return this.getGlobInfo('0x8b3c7c69') }
78
+ getContractStatus () { return this.read(this.contracts[0], '0x8b3c7c69') }
26
79
  // Get Global infos: Tax destinary Account
27
- async getTaxAccount () { return this.getGlobInfo('0x4f2eabe0') }
80
+ getTaxAccount () { return this.read(this.contracts[0], '0x4f2eabe0') }
28
81
 
29
82
  // Get Historical infos infos: Global balance
30
83
  async getHistoricalGlobalBalance (walletAddress, blockNb) {
31
- return this.getAmountAt('0x70a08231', walletAddress, blockNb)
84
+ const data = await this.read(
85
+ this.contracts[0], '0x70a08231', [
86
+ getNakedAddress(walletAddress)
87
+ ], blockNb)
88
+ return decodeData('number/100', data)
89
+ }
90
+
91
+ async getVersion () {
92
+ const data = await this.read(this.contracts[0], '0x54fd4d50')
93
+ return decodeData('string', data as string)
32
94
  }
33
95
 
34
96
 
@@ -36,46 +98,45 @@ export default abstract class BcReadAbstract {
36
98
  // Generic read function
37
99
 
38
100
  async getAmount (address, walletAddress) {
39
- const userInfo = getDataObj(
40
- this.contracts[0], address, [getNakedAddress(walletAddress)])
41
- const data = await this.ajaxReq.getEthCall(userInfo)
42
- return getNumber(data, 100.0).toString()
101
+ const data = await this.read(
102
+ this.contracts[0], address, [
103
+ getNakedAddress(walletAddress)
104
+ ])
105
+ return decodeData('number/100', data)
43
106
  }
44
107
 
45
108
  async getAccInfo (address, walletAddress) {
46
- return this.getInfo(this.contracts[0], address, walletAddress)
47
- }
48
-
49
- getGlobInfo (address) {
50
- const userInfo = getDataObj(this.contracts[0], address, [])
51
- return this.ajaxReq.getEthCall(userInfo)
52
- }
53
-
54
- async getAmountAt (address, walletAddress, blockNb) {
55
- const userInfo = getDataObj(
56
- this.contracts[0], address, [getNakedAddress(walletAddress)])
57
- const blockHex = '0x' + new BigNumber(blockNb).toString(16)
58
- const data = await this.ajaxReq.getEthCallAt(userInfo, blockHex)
59
- return getNumber(data, 100.0).toString()
109
+ const data = await this.read(
110
+ this.contracts[0], address, [
111
+ getNakedAddress(walletAddress)
112
+ ])
113
+ return decodeData('number', data)
60
114
  }
61
115
 
62
- async getInfo (contract, address, walletAddress) {
63
- const userInfo = getDataObj(
64
- contract, address, [getNakedAddress(walletAddress)])
65
- const data = await this.ajaxReq.getEthCall(userInfo)
66
- return getNumber(data, 1.0)
116
+ async read (contract: string, address: string, args?: any[],
117
+ blockNb: string = 'pending'): Promise<string> {
118
+ args = args || []
119
+ const ethCall = getDataObj(contract, address, args)
120
+ if (blockNb !== 'pending') {
121
+ blockNb = '0x' + new BigNumber(blockNb).toString(16)
122
+ }
123
+ try {
124
+ return (await this.ajaxReq.getEthCallAt(ethCall, blockNb)) as string
125
+ } catch (e) {
126
+ throw new Error(
127
+ `Failed read contract: ${contract}, fn: ${address}`
128
+ )
129
+ }
67
130
  }
68
131
 
69
132
  async getAmountForElement (
70
133
  contract, functionAddress, callerAddress, elementAddress) {
71
- const userInfo = getDataObj(
72
- contract, functionAddress,
73
- [
134
+ const data = await this.read(
135
+ contract, functionAddress, [
74
136
  getNakedAddress(callerAddress),
75
137
  getNakedAddress(elementAddress)
76
138
  ])
77
- const data = await this.ajaxReq.getEthCall(userInfo)
78
- return getNumber(data, 100.0).toString()
139
+ return decodeData('number/100', data)
79
140
  }
80
141
 
81
142
  async getElementInList (
@@ -84,19 +145,16 @@ export default abstract class BcReadAbstract {
84
145
 
85
146
  if (index < indMin) return list
86
147
 
87
- const userInfo = getDataObj(
88
- contract, mapFunctionAddress,
89
- [
148
+ const data = await this.read(
149
+ contract, mapFunctionAddress, [
90
150
  getNakedAddress(callerAddress),
91
151
  padLeft(new BigNumber(index).toString(16), 64)
92
152
  ])
93
- const data: {[k: string]: any} = await this.ajaxReq.getEthCall(userInfo)
94
-
95
153
  const amount = await this.getAmountForElement(
96
154
  contract, amountFunctionAddress, callerAddress, data)
97
155
 
98
- const cleanedAdd = '0x' + data.substring(data.length - 40)
99
- const element = { address: cleanedAdd, amount: amount }
156
+ const address = '0x' + data.substring(data.length - 40)
157
+ const element = { address, amount }
100
158
  list.unshift(element)
101
159
  return this.getElementInList(
102
160
  contract, mapFunctionAddress,
@@ -165,10 +223,11 @@ for (const key in ListFunction) {
165
223
  // avoid unwanted infinite loops
166
224
  indMax = indMax || 0
167
225
  indMin = indMin || 0
168
- const count = await this.getInfo(
169
- this.contracts[1],
170
- `0x${configList.count}`,
171
- walletAddress)
226
+ const data = await this.read(
227
+ this.contracts[1], `0x${configList.count}`, [
228
+ getNakedAddress(walletAddress)
229
+ ])
230
+ const count = decodeData('number', data)
172
231
  const list = []
173
232
  const index = Math.min(count - 1, indMax)
174
233
  return this.getElementInList(
@@ -13,20 +13,26 @@ function typeConv (label: string): (x:any) => (string | number) {
13
13
  if (label.endsWith('Address')) {
14
14
  return (a) => padLeft(getNakedAddress(a), 64)
15
15
  }
16
+ if (label === 'int') {
17
+ return (nb) => encodeNumber(parseInt(nb, 19))
18
+ }
16
19
  if (label.startsWith('limit') || label === 'amount') {
17
20
  return (nb) => encodeNumber(roundCent(nb))
18
21
  }
19
- if (label.endsWith('Status') || label.endsWith('Type')) {
22
+ if (label.endsWith('Status') || label.endsWith('Type') || label.endsWith('Int')) {
20
23
  return (nb) => encodeNumber(nb)
21
24
  }
25
+ if (label.endsWith('Hex')) {
26
+ return (s) => s.padEnd(128, '0')
27
+ }
22
28
  if (label === 'status') {
23
- return (nb) => (parseInt(nb, 10) === 0 ? 0 : 1)
29
+ return (nb) => encodeNumber(parseInt(nb, 10) === 0 ? 0 : 1)
24
30
  }
25
31
  throw new Error(`Unexpected label '${label}' in FnDefs.`)
26
32
  }
27
33
 
28
34
 
29
- export default abstract class BcTransactionAbstract {
35
+ export abstract class BcTransactionAbstract {
30
36
 
31
37
  abstract ajaxReq: AjaxReq
32
38
  abstract contracts: string[]
@@ -77,81 +83,56 @@ export default abstract class BcTransactionAbstract {
77
83
  }
78
84
 
79
85
 
80
- [
81
- // First Contract
82
- {
83
- setAccountParam: '848b2592:accAddress accStatus accType limitPlus limitMinus',
84
- pledgeAccount: '6c343eef:accAddress amount *',
85
- setAllowance: 'd4e12f2e:spenderAddress amount',
86
- setDelegation: '75741c79:spenderAddress limit',
87
- setTaxAmount: 'f6f1897d:amount',
88
- setTaxLegAmount: 'fafaf4c0:amount',
89
- setTaxAccount: 'd0385b5e:accAddress',
90
- setOwnerAccount: 'f2fde38b:accAddress',
91
- setContractStatus: '0x88b8084f:status',
92
- },
93
- // Second Contract
94
- {
95
- transferNant: 'a5f7c148:toAddress amount *',
96
- transferCM: '60ca9c4c:toAddress amount *',
97
- transferOnBehalfNant: '1b6b1ee5:fromAddress toAddress amount D',
98
- transferOnBehalfCM: '74c421fe:fromAddress toAddress amount D',
99
- askTransferFrom: '58258353:fromAddress amount',
100
- askTransferCMFrom: '2ef9ade2:fromAddress amount',
101
- payRequestNant: '132019f4:toAddress amount *',
102
- payRequestCM: '1415707c:toAddress amount *',
103
- rejectRequest: 'af98f757:toAddress',
104
- dismissAcceptedInfo: 'ccf93c7a:accAddress',
105
- dismissRejectedInfo: '88759215:accAddress',
106
- }
107
- ].forEach((contractFnDefs, contractNb) => {
108
-
109
- for (const fnName in contractFnDefs) {
110
-
111
- const [fnHash, argStringList] = contractFnDefs[fnName].split(':')
112
- const argList = argStringList.split(' ')
113
- let hasAdditionalPostData = false
114
- let hasDelegate = false
115
- if (argList.slice(-1)[0] === '*') {
116
- hasAdditionalPostData = true
117
- argList.pop()
118
- } else if (argList.slice(-1)[0] === 'D') {
119
- hasAdditionalPostData = true
120
- hasDelegate = true
121
- argList.pop()
122
- }
86
+ export function transactionFactory(transactionDefs: any[], bcTransactionClass: any) {
87
+
88
+ transactionDefs.forEach((contractFnDefs, contractNb) => {
123
89
 
124
- // Build argument array function
125
- const argFnList = argList.map((arg) => typeConv(arg))
126
- const concatArgs = (args) =>
127
- args.map((arg, idx) => argFnList[idx](arg)).join('')
128
-
129
- BcTransactionAbstract.prototype[fnName] = async function (wallet, ...args) {
130
- const addr = wallet.getAddressString()
131
- const data = await this.ajaxReq.getTransactionData(addr)
132
- // TODO: must test this
133
- if (data.error) {
134
- console.log(`Failed getTransactionData(${addr})`)
135
- throw new Error(data.msg)
90
+ for (const fnName in contractFnDefs) {
91
+
92
+ const [fnHash, argStringList] = contractFnDefs[fnName].split(':')
93
+ const argList = argStringList.split(' ')
94
+ let hasAdditionalPostData = false
95
+ let hasDelegate = false
96
+ if (argList.slice(-1)[0] === '*') {
97
+ hasAdditionalPostData = true
98
+ argList.pop()
99
+ } else if (argList.slice(-1)[0] === 'D') {
100
+ hasAdditionalPostData = true
101
+ hasDelegate = true
102
+ argList.pop()
136
103
  }
137
- const additionalPostData = hasAdditionalPostData ? args.pop() : {}
138
- if (hasDelegate) {
139
- additionalPostData.delegate = wallet.getAddressString()
104
+
105
+ // Build argument array function
106
+ const argFnList = argList.map((arg) => typeConv(arg))
107
+ const concatArgs = (args) =>
108
+ args.map((arg, idx) => argFnList[idx](arg)).join('')
109
+
110
+ bcTransactionClass.prototype[fnName] = async function (wallet, ...args) {
111
+ const addr = wallet.getAddressString()
112
+ const data = await this.ajaxReq.getTransactionData(addr)
113
+ // TODO: must test this
114
+ if (data.error) {
115
+ console.log(`Failed getTransactionData(${addr})`)
116
+ throw new Error(data.msg)
117
+ }
118
+ const additionalPostData = hasAdditionalPostData ? args.pop() : {}
119
+ if (hasDelegate) {
120
+ additionalPostData.delegate = wallet.getAddressString()
121
+ }
122
+ const rawSignedTx = generateTx({
123
+ gasLimit: 500000,
124
+ data: fnHash + concatArgs(args),
125
+ to: this.contracts[contractNb],
126
+ unit: 'ether',
127
+ value: 0,
128
+ nonce: 1,
129
+ gasPrice: null,
130
+ donate: false,
131
+ from: addr,
132
+ key: wallet.getPrivateKeyString()
133
+ }, data)
134
+ return this.ajaxReq.sendTx(rawSignedTx, additionalPostData)
140
135
  }
141
- const rawTx = generateTx({
142
- gasLimit: 500000,
143
- data: fnHash + concatArgs(args),
144
- to: this.contracts[contractNb],
145
- unit: 'ether',
146
- value: 0,
147
- nonce: 1,
148
- gasPrice: null,
149
- donate: false,
150
- from: addr,
151
- key: wallet.getPrivateKeyString()
152
- }, data)
153
- if (rawTx.isError) return rawTx
154
- return this.ajaxReq.sendTx(rawTx.signedTx, additionalPostData)
155
136
  }
156
- }
157
- })
137
+ })
138
+ }
@@ -0,0 +1,30 @@
1
+
2
+
3
+ export default [
4
+ // First Contract
5
+ {
6
+ setAccountParam: '848b2592:accAddress accStatus accType limitPlus limitMinus',
7
+ pledgeAccount: '6c343eef:accAddress amount *',
8
+ setAllowance: 'd4e12f2e:spenderAddress amount',
9
+ setDelegation: '75741c79:spenderAddress limit',
10
+ setTaxAmount: 'f6f1897d:int',
11
+ setTaxLegAmount: 'fafaf4c0:int',
12
+ setTaxAccount: 'd0385b5e:accAddress',
13
+ setOwnerAccount: 'f2fde38b:accAddress',
14
+ setContractStatus: '88b8084f:status',
15
+ },
16
+ // Second Contract
17
+ {
18
+ transferNant: 'a5f7c148:toAddress amount *',
19
+ transferCM: '60ca9c4c:toAddress amount *',
20
+ transferOnBehalfNant: '1b6b1ee5:fromAddress toAddress amount D',
21
+ transferOnBehalfCM: '74c421fe:fromAddress toAddress amount D',
22
+ askTransferFrom: '58258353:fromAddress amount',
23
+ askTransferCMFrom: '2ef9ade2:fromAddress amount',
24
+ payRequestNant: '132019f4:toAddress amount *',
25
+ payRequestCM: '1415707c:toAddress amount *',
26
+ rejectRequest: 'af98f757:toAddress',
27
+ dismissAcceptedInfo: 'ccf93c7a:accAddress',
28
+ dismissRejectedInfo: '88759215:accAddress',
29
+ },
30
+ ]
package/src/connection.ts CHANGED
@@ -43,8 +43,15 @@ abstract class ConnectionAbstract {
43
43
  ///
44
44
  // [Lower level] Get the list of ComChain end-points from given repo
45
45
  ///
46
- getCCEndPointList (repo: string) {
47
- return this.http.get(repo + config.nodesRepo, { _: new Date().getTime() })
46
+ async getCCEndPointList (repo: string) {
47
+ try {
48
+ return await this.http.get(
49
+ repo + config.nodesRepo,
50
+ { _: new Date().getTime() })
51
+ } catch (e) {
52
+ console.error(`Failed to get endpoint list on ${repo}`, e)
53
+ return false
54
+ }
48
55
  }
49
56
 
50
57
  ///
@@ -232,11 +239,12 @@ export default abstract class ConnectionMgrAbstract extends ConnectionAbstract {
232
239
  public getLocalConfJSON () {
233
240
  if (this.conf) return this.conf
234
241
  const cfgJson = this.persistentStore.get('ServerConf')
235
- if (!cfgJson) return null
236
- const cfg = JSON.parse(cfgJson)
237
- // Completing with other informations
238
- cfg.repo = this.repo
239
- cfg.custoRepo = this.repo + config.custoRepo
242
+ const cfg = cfgJson ? JSON.parse(cfgJson) : {}
243
+ // Completing with other informations if available
244
+ if (this.repo) {
245
+ cfg.repo = this.repo
246
+ cfg.custoRepo = this.repo + config.custoRepo
247
+ }
240
248
  return cfg
241
249
  }
242
250