OSDN Git Service

update error code
[bytom/Bytom-JS-SDK.git] / src / utils / transaction / signTransaction.js
1 import { decryptKey} from '../key/keystore';
2 import {XPrv} from '../key/chainkd';
3
4
5 function signTransaction(transaction, password, keyJSON)  {
6     if (!(transaction) || !(password) || !(keyJSON) ){
7         throw('Input args are empty', 'BTM3100');
8     }
9     let tx = transaction;
10     let signRet = [];
11
12     for(let k = 0; k<tx.signingInstructions.length; k++){
13         const v = tx.signingInstructions[k];
14         let path = [];
15         for(let i = 0; i< v.derivationPath.length; i++ ){
16             path[i] = Buffer.from(v.derivationPath[i],"hex");
17         }
18         for(let d of v.signData ){
19
20             const h = Buffer.from(d, 'hex');
21             const signData = SignData(keyJSON, path, h, password);
22             if(signRet[k] == undefined) {
23                 signRet[k] = [];
24             }
25             signRet[k] = signRet[k].concat( (new Buffer(signData)).toString('hex'));
26         }
27     }
28     let ret ={};
29     ret.raw_transaction = tx.rawTransaction;
30     ret.signatures = signRet;
31     return ret;
32 }
33
34 function SignData(keyJSON, path, data, password){
35     const key = decryptKey(keyJSON, password);
36     let _xprv = new XPrv(key.xPrv);
37     if (path && path.length > 0) {
38         _xprv = _xprv.Derive(path);
39     }
40     return _xprv.Sign(data);
41 }
42
43 export {
44     signTransaction,
45     SignData
46 };