From a520d91f3a4913d563754593302b9b0d796a1ae3 Mon Sep 17 00:00:00 2001 From: Alejo Acosta Date: Tue, 10 Dec 2024 11:12:05 -0300 Subject: [PATCH] fix quaiwallet signing unit test --- examples/signing/sign-verify-quai.js | 24 +++++++++++++----- ...test.ts => quaihdwallet-sign.unit.test.ts} | 21 ++++++++++++--- testcases/quai-sign-message.json.gz | Bin 360 -> 361 bytes testcases/quai-transaction.json.gz | Bin 510 -> 541 bytes testcases/sign-typed-data.json.gz | Bin 2424 -> 2438 bytes 5 files changed, 35 insertions(+), 10 deletions(-) rename src/_tests/unit/{quaihdwallet.unit.test.ts => quaihdwallet-sign.unit.test.ts} (73%) diff --git a/examples/signing/sign-verify-quai.js b/examples/signing/sign-verify-quai.js index 2d4d68fe..e12effe9 100644 --- a/examples/signing/sign-verify-quai.js +++ b/examples/signing/sign-verify-quai.js @@ -9,24 +9,34 @@ async function main() { // Create tx const addressInfo1 = await quaiWallet.getNextAddress(0, quais.Zone.Cyprus1); const from = addressInfo1.address; + console.log('from: ', from); const txObj = new quais.QuaiTransaction(from); + txObj.chainId = BigInt(969); + txObj.nonce = BigInt(0); txObj.gasLimit = BigInt(1000000); - (txObj.minerTip = BigInt(10000000000)), - (txObj.gasPrice = BigInt(30000000000000)), - (txObj.to = '0x002F4783248e2D6FF1aa6482A8C0D7a76de3C329'); + txObj.minerTip = BigInt(10000000000); + txObj.gasPrice = BigInt(30000000000000); + txObj.to = '0x002F4783248e2D6FF1aa6482A8C0D7a76de3C329'; txObj.value = BigInt(4200000); + + // transaction to sign + console.log('txObj: ', JSON.stringify(txObj, null, 2)); + // Sign the tx - const signedTxSerialized = await quaiWallet.signTransaction(txObj); + const signedTxSerialized = await quaiWallet.signTransaction(txObj); + console.log('signedTxSerialized: ', signedTxSerialized); // Unmarshall the signed tx - const signedTx = quais.QuaiTransaction.from(signedTxSerialized); + const signedTxObj = quais.QuaiTransaction.from(signedTxSerialized); + + console.log('signedTxObj: ', signedTxObj); // Get the signature - const signature = signedTx.signature; + const signature = signedTxObj.signature; // Verify the signature - const txHash = signedTx.digest; + const txHash = signedTxObj.digest; const signerAddress = quais.recoverAddress(txHash, signature); if (signerAddress === from) { diff --git a/src/_tests/unit/quaihdwallet.unit.test.ts b/src/_tests/unit/quaihdwallet-sign.unit.test.ts similarity index 73% rename from src/_tests/unit/quaihdwallet.unit.test.ts rename to src/_tests/unit/quaihdwallet-sign.unit.test.ts index b6eca3a4..9d850075 100644 --- a/src/_tests/unit/quaihdwallet.unit.test.ts +++ b/src/_tests/unit/quaihdwallet-sign.unit.test.ts @@ -4,20 +4,35 @@ import { loadTests } from '../utils.js'; import { TestCaseQuaiTransaction, TestCaseQuaiTypedData, Zone, TestCaseQuaiMessageSign } from '../types.js'; -import { recoverAddress } from '../../index.js'; +import { QuaiTransaction, recoverAddress, Signature } from '../../index.js'; import { Mnemonic, QuaiHDWallet } from '../../index.js'; describe('Test transaction signing', function () { const tests = loadTests('quai-transaction'); for (const test of tests) { + let txHash: string; + let signature: Signature; it(`tests signing an EIP-155 transaction: ${test.name}`, async function () { const mnemonic = Mnemonic.fromPhrase(test.mnemonic); const quaiWallet = QuaiHDWallet.fromMnemonic(mnemonic); quaiWallet.getNextAddressSync(test.params.account, test.params.zone); const txData = test.transaction; - const signed = await quaiWallet.signTransaction(txData); - assert.equal(signed, test.signed, 'signed'); + const signedTxSerialized = await quaiWallet.signTransaction(txData); + assert.equal(signedTxSerialized, test.signed, 'signed'); + + const signedTxObj = QuaiTransaction.from(signedTxSerialized); + txHash = signedTxObj.digest; + signature = signedTxObj.signature; + }); + + it(`tests verifying the signature: ${test.name}`, function () { + const signerAddress = recoverAddress(txHash, signature); + assert.equal( + signerAddress, + test.transaction.from, + `Signer address expected to be ${test.transaction.from} but got ${signerAddress}`, + ); }); } }); diff --git a/testcases/quai-sign-message.json.gz b/testcases/quai-sign-message.json.gz index 9e201fd157a42e5bdece94114e5f8009757d70f1..2c38302d6e707bbe2a99ea6251fe59f9e7860fb1 100644 GIT binary patch delta 333 zcmV-T0kZz+0_g$>ABzYGVoO+Okq9S$$g&=EPLLa<2vUd=wJSt27q<3=Aa{?QKW!=! znBm8n@8{F6^XW7!q4DqqhObxmdDPdvi2)TeYabGiNK8{ zz2W*d4l!rg?xjQ7q#m$VUYwxwtHXAa{x2zSTe$qEMk*KH`k|>8$H^%~?>SONg(m75 zXGfj`=`cAYO;g0A)T9wDnlu{g#wq1symIk_xRuLZ?7s2`)R=5+#%T<5)Fxw0fkO5= z8BJt7&rzYG=+#cPDcgi9s}%G+n4EHk(BV9%2{Bt`vnHqgL_xZ;knW1%2(g6Sf?ysi& delta 332 zcmV-S0ki(;0_Xw=ABzYG)QNp&kq9S$P?qIKPLLa<2vSfYwJSt27q<3=Aa{?PKWzX4 zBxb-5GvCjrU+2@QTd7F*1-h@2v%)vsGJonmA5K}N=$gXeO1bG%HVCRe;gK|_6-vrE z=?YKP4D~7bA&}OG9=p8>u&z`E=w7e7L7`G8!%n%vrtjmtrblD?wACwUewSN+3LwQR zzv22fju(lr-&2LOYd&Bly@a94tHOTM`Y);MJ6--$gVRO!dU*J@f^EaSMGl6?*^fQpz@uFZJDlu7 e4M4ceG&oN^`X)SbeVQzC_V{~b6ZZ2wbZ*Blhk-KgiF%U&-=_`n> z6JYoz(>az61W1u0U65jy4~xi>6m}`uPT+qJSCSuWxV*!A<_`DQcJpt$*$f497`~8U z#^P)K48x~Y%_Zbol3ObwAL?V6iL3PwIi)(KLUNj>R10~mbt3ICOs7CnIn{OVwm^I> z*aE?0+t-<7%o!)L;MB-mpV!ZQI(6ol=C&twdd`RBNXTRL&txB_sgf~-NS0%2BrSDX zVL3eoPg;0tWI5D!NqWE;^U`y!(`<&nwVcO+C%BBV8PK_UEUl~1&o5_J>*FryTA$&~ z8t0l{t(x8K?Cy>;W#f%i7;kS3vpe`|xRo{vYJln8wSn7XD&KtfT4gU%sl}~1;BtJx z<$KC$%|PM2E_zNS%sXg zjavD@Z#lEqtS6j~D^jpC>+M07^iYDoA`Jj#RCIKFLwgnD6^+J$zoK17_s0OnfD52X z0P9sFxaYkCN9ekX)SbeVQzC_V{~b6ZZ2wbZ*Blhkxy^jAP~jRyPpF2 z+)Be=LvHDABUS35_o|06jI$^PRoO+l?pQZt z4kdkt?o(4!rc`qD?S<00Jk!j4DNpPg%M>$9ahhVu?75VQt8@AR5_ni7SgsnHns` z7Yb~pmz6E&vfd^=g?fM6JZlZRpkHf(s&CG5 zF6qN59#n6oP?p5eJUnnjqpY~M2RQcFn?Uj)g=_p>=T8{(w@|IlxLe0uvTswsR`7_+ zk2!7v{}8^%6x&1`+S=5$d~`QPj$e){7%R=eaXV-oI9KNWF!K87j|2aDFSm5H*%hY? zy`%o+TjFD;@D8*9TyS**58(#(|AEopz+vEolGl16K!7AGEP@SSqyUiEH1AYBD+JJW z*9aWAY2{kOI7rkLHIVPMv)qlAv?f&ADI1hf!ni^8;6^UF1MR`~fg4Uk9}Ei6lJwZH zXha)_>!ABlNG=U3&Ryt(w?L|w^%sb1Z5=4;tpRThjbpdpz3qSf1zE9ZJJR diff --git a/testcases/sign-typed-data.json.gz b/testcases/sign-typed-data.json.gz index b7da70650417c62ab973ead77c34f9de63d60e7c..510d93c855422b5efe6e0643cd62459dc96528ac 100644 GIT binary patch literal 2438 zcmV;133>J(iwFpINmyq919NF-ZY^|qaAjmIWMOn+E^2dcZUEg`%Who96yQ0IOlFYY-h8s%dfxu_doys*Sh}t%lwO$b=}OCWu2dgXUno# zmSgL$zpTq$``r)PHW+^BzaG|mae=UJu=TkJrmdamim%;y@5Hy*xK_(048khGsX2e#|IPL_a^l@}KTev-h8w2At92ShxJl^2 z3&KbyIUy$RgPNqsL@u&s8m$GZQA-dvG-a_NDRn2Nc`)WHIreI#7D5|Vss(G2eUV^s z5cM=HbZa9KRcv;JXk32{irwz<*cVTWD{lE##i*IY{>N21kQ?~c3)l8~!d%iKG$_F^1zi?I#Q zt#tPpgoRHdEc_mXef#Nwa(*Du=ZETZ*YuAD-t4cpSFgW}4_Jb>=MOV|% zVUd#aRhu<#tt2Ex;+|Xp7ii&1rF!SOQb~!K5Oc}{8PYVfHF1)K24at)j)a*8v5wDa1?VTHV3xLJbcU95#F^$MmGU2T)<4Fm&kKi z&gy#g;#>{2A|zI}s$p<-(GQB(aasZz(C;UOrQt(PW=u^g%9LQfe2V&CgxCK1^ zvR>`4b3Gkov4nRZGfNWQeQSd3Hy@)VbCpoeIEnQ92U5=VYA^g8$~nUS2YK}z?#QiO z_nR*g6W=9YTQ{9&}{I)p;b?WnYiRHL~L#NY>2NAisE1cNX za@^60LN;^B^}#A1%IF6{xjDS=S0A$z2nK}eUGWL34E$;lf+(qnn5wBsMyi4gCGdHA z0@ZQ@#Uhb=4kj+eBr$hjKU=d7vg~EV>?-%>K+VO+TphGq(*njnOHZk~)IIqIDFzmb zaYiBvO$OFM8y5$ba?o%?*tjOo(ZGe0v25%bTJsVkJLdv)7eZ4(NzV)lEmhG;3m80- z3?O{sk7{qigotZ%naUINBwsl_J(g%l+|36>oYHT(^Dn0dn|n+xGXYP%Hp^pyCiF7C zv`6wRnmo;H{?p9n|5!2g94YlYMFb$!j`BDFB5R>nF4AOF7cxpbcYG->4u!)RK}W5q z`P3;Uoc$S%RH#8jnLScP59sAYeh;|v$TZ-hvj}I)qZAk{3l);0SdZo+wW)am<^@5;{xH6 z9k$I0JmcW_|8xk) zm&bOA%zbQ^XuuH>XK1>Vq8gQ%ml49m2M;x@A|pglI^mt>?AbfQt4Fe?Vp2bMA@P5= zOXPlsdZA~jm&3XozYORG>FYF=U?wRPKu7GeN@lsc0NNZ}@^Wt(HdAw~CpmLZ#;j{;gc!=;DAsE;{eezZLz1|k^x211C11{D0wXr#oeXJQmE_k6W2C6 z;OP>;JfgU!Av3I)qC$7ne)c-Vt0Jqo8s&(Z4!CC&Z!{{L$N6g;o9($bJL_|zEed%t|P>h(20&Tc9h!$Ld)=_AU}1ebC1w@@g1SAgqbv?-r#D9;oXQuED;GMBcC8S;Zyv) zsQ{o9wJX4;OH7cWk@P%VQ2qckbQ}${y6!awSDGKlPYViAlrGf)L=6%_M-tY=lohqD zTTW-;;(9}b93TjMO!YuLm>S7l!PC=-CqwvS%8L$lt&quHO>3!=U{vAw3FVgS1ZNqe z0rLtCpKHo7WcYy)DEMA!s_8Mjb%g@g%z{;ud$PcWuN*Fq3+x9Ke9rnKA)sUi(HKQL zXbddZDh!Md^PVZf#jv$;mvj%VFG&jbDDW!P$59pP2gd+cqYyZj7^If7BAKm9b1@?e zqxAvHq$7s@)m&db>+%w5@dw>Mpg#H>Mq+kAwX>e!MuAS4(CBIp^S=&My29h&oY>_S zj2t^d)kF=lm@?3ZQ%0Rj1r;fb8Xbga8o~K_t2q?dtnj*BTdrrMJxp^&4Ya@vor`S2 zz@jkd!VyP5uimO}6;BnyHy9LoMY(HVdTr3{#Y5fBt5wf z@&Vrzi#F@70_Zg=49mzg5ZIvei_@% literal 2424 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