@@ -8,20 +8,21 @@ import (
88 "strconv"
99
1010 dcrwallet "decred.org/dcrwallet/v4/wallet"
11+ "github.com/decred/dcrd/chaincfg/chainhash"
1112 "github.com/decred/dcrd/txscript/v4/stdaddr"
1213 "github.com/decred/libwallet/dcr"
1314)
1415
1516const defaultAccount = "default"
1617
17- //export createSignedTransaction
18- func createSignedTransaction (cName , cCreateSignedTxJSONReq * C.char ) * C.char {
18+ //export createTransaction
19+ func createTransaction (cName , cCreateTxJSONReq * C.char ) * C.char {
1920 w , exists := loadedWallet (cName )
2021 if ! exists {
2122 return errCResponse ("wallet with name %q does not exist" , goString (cName ))
2223 }
23- signSendJSONReq := goString (cCreateSignedTxJSONReq )
24- var req CreateSignedTxReq
24+ signSendJSONReq := goString (cCreateTxJSONReq )
25+ var req CreateTxReq
2526 if err := json .Unmarshal ([]byte (signSendJSONReq ), & req ); err != nil {
2627 return errCResponse ("malformed sign send request: %v" , err )
2728 }
@@ -53,19 +54,21 @@ func createSignedTransaction(cName, cCreateSignedTxJSONReq *C.char) *C.char {
5354 ignoreInputs [i ] = o
5455 }
5556
56- if err := w .MainWallet ().Unlock (w .ctx , []byte (req .Password ), nil ); err != nil {
57- return errCResponse ("cannot unlock wallet: %v" , err )
57+ if req .Sign {
58+ if err := w .MainWallet ().Unlock (w .ctx , []byte (req .Password ), nil ); err != nil {
59+ return errCResponse ("cannot unlock wallet: %v" , err )
60+ }
61+ defer w .MainWallet ().Lock ()
5862 }
59- defer w .MainWallet ().Lock ()
6063
61- txBytes , txhash , fee , err := w .CreateSignedTransaction (w .ctx , outputs , inputs , ignoreInputs , uint64 (req .FeeRate ), req .SendAll )
64+ txBytes , txhash , fee , err := w .CreateTransaction (w .ctx , outputs , inputs , ignoreInputs , uint64 (req .FeeRate ), req .SendAll , req . Sign )
6265 if err != nil {
6366 return errCResponse ("unable to sign send transaction: %v" , err )
6467 }
65- res := & CreateSignedTxRes {
66- SignedHex : hex .EncodeToString (txBytes ),
67- Txid : txhash .String (),
68- Fee : int (fee ),
68+ res := & CreateTxRes {
69+ Hex : hex .EncodeToString (txBytes ),
70+ Txid : txhash .String (),
71+ Fee : int (fee ),
6972 }
7073
7174 b , err := json .Marshal (res )
@@ -214,3 +217,66 @@ func bestBlock(cName *C.char) *C.char {
214217 }
215218 return successCResponse ("%s" , b )
216219}
220+
221+ //export decodeTx
222+ func decodeTx (cName , cTxHex * C.char ) * C.char {
223+ w , exists := loadedWallet (cName )
224+ if ! exists {
225+ return errCResponse ("wallet with name %q does not exist" , goString (cName ))
226+ }
227+ decoded , err := w .DecodeTx (goString (cTxHex ))
228+ if err != nil {
229+ return errCResponse ("unable to decode tx: %v" , err )
230+ }
231+ b , err := json .Marshal (decoded )
232+ if err != nil {
233+ return errCResponse ("unable to marshal decoded tx: %v" , err )
234+ }
235+ return successCResponse ("%s" , b )
236+ }
237+
238+ //export getTxn
239+ func getTxn (cName , cHashes * C.char ) * C.char {
240+ w , exists := loadedWallet (cName )
241+ if ! exists {
242+ return errCResponse ("wallet with name %q does not exist" , goString (cName ))
243+ }
244+ var txIDs []string
245+ if err := json .Unmarshal ([]byte (goString (cHashes )), & txIDs ); err != nil {
246+ return errCResponse ("unable to unmarshal hashes: %v" , err )
247+ }
248+ txHashes := make ([]* chainhash.Hash , len (txIDs ))
249+ for i , txID := range txIDs {
250+ txHash , err := chainhash .NewHashFromStr (txID )
251+ if err != nil {
252+ return errCResponse ("unable to create tx hash: %v" , err )
253+ }
254+ txHashes [i ] = txHash
255+ }
256+ hexes , err := w .GetTxn (w .ctx , txHashes )
257+ if err != nil {
258+ return errCResponse ("unable to get txn: %v" , err )
259+ }
260+ b , err := json .Marshal (hexes )
261+ if err != nil {
262+ return errCResponse ("unable to marshal txn: %v" , err )
263+ }
264+ return successCResponse ("%s" , b )
265+ }
266+
267+ //export addSigs
268+ func addSigs (cName , cTxHex , cSigScripts * C.char ) * C.char {
269+ w , exists := loadedWallet (cName )
270+ if ! exists {
271+ return errCResponse ("wallet with name %q does not exist" , goString (cName ))
272+ }
273+ var sigScripts []string
274+ if err := json .Unmarshal ([]byte (goString (cSigScripts )), & sigScripts ); err != nil {
275+ return errCResponse ("unable to unmarshal sig scripts: %v" , err )
276+ }
277+ signedHex , err := w .AddSigs (goString (cTxHex ), sigScripts )
278+ if err != nil {
279+ return errCResponse ("unable sign tx: %v" , err )
280+ }
281+ return successCResponse ("%s" , signedHex )
282+ }
0 commit comments