viem 1.7.0 → 1.8.1

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 (147) hide show
  1. package/README.md +6 -0
  2. package/dist/cjs/actions/index.js +8 -2
  3. package/dist/cjs/actions/index.js.map +1 -1
  4. package/dist/cjs/actions/public/estimateFeesPerGas.js +3 -2
  5. package/dist/cjs/actions/public/estimateFeesPerGas.js.map +1 -1
  6. package/dist/cjs/actions/public/estimateGas.js +2 -2
  7. package/dist/cjs/actions/public/estimateGas.js.map +1 -1
  8. package/dist/cjs/actions/public/estimateMaxPriorityFeePerGas.js +3 -3
  9. package/dist/cjs/actions/public/estimateMaxPriorityFeePerGas.js.map +1 -1
  10. package/dist/cjs/actions/public/watchContractEvent.js +10 -7
  11. package/dist/cjs/actions/public/watchContractEvent.js.map +1 -1
  12. package/dist/cjs/{utils/transaction/prepareRequest.js → actions/wallet/prepareTransactionRequest.js} +19 -10
  13. package/dist/cjs/actions/wallet/prepareTransactionRequest.js.map +1 -0
  14. package/dist/cjs/actions/wallet/sendRawTransaction.js +11 -0
  15. package/dist/cjs/actions/wallet/sendRawTransaction.js.map +1 -0
  16. package/dist/cjs/actions/wallet/sendTransaction.js +6 -6
  17. package/dist/cjs/actions/wallet/sendTransaction.js.map +1 -1
  18. package/dist/cjs/actions/wallet/signTransaction.js +47 -0
  19. package/dist/cjs/actions/wallet/signTransaction.js.map +1 -0
  20. package/dist/cjs/chains/celo/formatters.js +4 -1
  21. package/dist/cjs/chains/celo/formatters.js.map +1 -1
  22. package/dist/cjs/chains/index.js +3 -2
  23. package/dist/cjs/chains/index.js.map +1 -1
  24. package/dist/cjs/clients/decorators/public.js +4 -0
  25. package/dist/cjs/clients/decorators/public.js.map +1 -1
  26. package/dist/cjs/clients/decorators/wallet.js +6 -0
  27. package/dist/cjs/clients/decorators/wallet.js.map +1 -1
  28. package/dist/cjs/errors/version.js +1 -1
  29. package/dist/cjs/index.js +4 -5
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/utils/data/isBytesEqual.js +4 -3
  32. package/dist/cjs/utils/data/isBytesEqual.js.map +1 -1
  33. package/dist/cjs/utils/ens/encodedLabelToLabelhash.js +2 -2
  34. package/dist/cjs/utils/ens/encodedLabelToLabelhash.js.map +1 -1
  35. package/dist/cjs/utils/formatters/transactionRequest.js +9 -1
  36. package/dist/cjs/utils/formatters/transactionRequest.js.map +1 -1
  37. package/dist/cjs/utils/index.js +3 -3
  38. package/dist/cjs/utils/index.js.map +1 -1
  39. package/dist/esm/actions/index.js +3 -0
  40. package/dist/esm/actions/index.js.map +1 -1
  41. package/dist/esm/actions/public/estimateFeesPerGas.js +3 -2
  42. package/dist/esm/actions/public/estimateFeesPerGas.js.map +1 -1
  43. package/dist/esm/actions/public/estimateGas.js +2 -2
  44. package/dist/esm/actions/public/estimateGas.js.map +1 -1
  45. package/dist/esm/actions/public/estimateMaxPriorityFeePerGas.js +3 -3
  46. package/dist/esm/actions/public/estimateMaxPriorityFeePerGas.js.map +1 -1
  47. package/dist/esm/actions/public/watchContractEvent.js +5 -2
  48. package/dist/esm/actions/public/watchContractEvent.js.map +1 -1
  49. package/dist/esm/{utils/transaction/prepareRequest.js → actions/wallet/prepareTransactionRequest.js} +58 -9
  50. package/dist/esm/actions/wallet/prepareTransactionRequest.js.map +1 -0
  51. package/dist/esm/actions/wallet/sendRawTransaction.js +31 -0
  52. package/dist/esm/actions/wallet/sendRawTransaction.js.map +1 -0
  53. package/dist/esm/actions/wallet/sendTransaction.js +6 -6
  54. package/dist/esm/actions/wallet/sendTransaction.js.map +1 -1
  55. package/dist/esm/actions/wallet/signTransaction.js +87 -0
  56. package/dist/esm/actions/wallet/signTransaction.js.map +1 -0
  57. package/dist/esm/chains/celo/formatters.js +4 -1
  58. package/dist/esm/chains/celo/formatters.js.map +1 -1
  59. package/dist/esm/chains/index.js +1 -0
  60. package/dist/esm/chains/index.js.map +1 -1
  61. package/dist/esm/clients/decorators/public.js +4 -0
  62. package/dist/esm/clients/decorators/public.js.map +1 -1
  63. package/dist/esm/clients/decorators/wallet.js +6 -0
  64. package/dist/esm/clients/decorators/wallet.js.map +1 -1
  65. package/dist/esm/errors/version.js +1 -1
  66. package/dist/esm/index.js +1 -2
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/utils/data/isBytesEqual.js +2 -1
  69. package/dist/esm/utils/data/isBytesEqual.js.map +1 -1
  70. package/dist/esm/utils/ens/encodedLabelToLabelhash.js +1 -1
  71. package/dist/esm/utils/ens/encodedLabelToLabelhash.js.map +1 -1
  72. package/dist/esm/utils/formatters/transactionRequest.js +8 -0
  73. package/dist/esm/utils/formatters/transactionRequest.js.map +1 -1
  74. package/dist/esm/utils/index.js +3 -1
  75. package/dist/esm/utils/index.js.map +1 -1
  76. package/dist/types/actions/index.d.ts +3 -0
  77. package/dist/types/actions/index.d.ts.map +1 -1
  78. package/dist/types/actions/public/estimateFeesPerGas.d.ts +2 -2
  79. package/dist/types/actions/public/estimateFeesPerGas.d.ts.map +1 -1
  80. package/dist/types/actions/public/estimateMaxPriorityFeePerGas.d.ts +4 -2
  81. package/dist/types/actions/public/estimateMaxPriorityFeePerGas.d.ts.map +1 -1
  82. package/dist/types/actions/public/watchContractEvent.d.ts.map +1 -1
  83. package/dist/types/actions/wallet/prepareTransactionRequest.d.ts +52 -0
  84. package/dist/types/actions/wallet/prepareTransactionRequest.d.ts.map +1 -0
  85. package/dist/types/actions/wallet/sendRawTransaction.d.ts +38 -0
  86. package/dist/types/actions/wallet/sendRawTransaction.d.ts.map +1 -0
  87. package/dist/types/actions/wallet/sendTransaction.d.ts.map +1 -1
  88. package/dist/types/actions/wallet/signTransaction.d.ts +55 -0
  89. package/dist/types/actions/wallet/signTransaction.d.ts.map +1 -0
  90. package/dist/types/chains/celo/formatters.d.ts +303 -5
  91. package/dist/types/chains/celo/formatters.d.ts.map +1 -1
  92. package/dist/types/chains/celo/types.d.ts +43 -17
  93. package/dist/types/chains/celo/types.d.ts.map +1 -1
  94. package/dist/types/chains/index.d.ts +958 -19
  95. package/dist/types/chains/index.d.ts.map +1 -1
  96. package/dist/types/chains/utils.d.ts +1 -1
  97. package/dist/types/chains/utils.d.ts.map +1 -1
  98. package/dist/types/clients/decorators/public.d.ts +66 -0
  99. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  100. package/dist/types/clients/decorators/wallet.d.ts +111 -0
  101. package/dist/types/clients/decorators/wallet.d.ts.map +1 -1
  102. package/dist/types/errors/version.d.ts +1 -1
  103. package/dist/types/index.d.ts +4 -2
  104. package/dist/types/index.d.ts.map +1 -1
  105. package/dist/types/types/chain.d.ts +2 -2
  106. package/dist/types/types/chain.d.ts.map +1 -1
  107. package/dist/types/types/eip1193.d.ts +1 -1
  108. package/dist/types/utils/data/isBytesEqual.d.ts +1 -1
  109. package/dist/types/utils/data/isBytesEqual.d.ts.map +1 -1
  110. package/dist/types/utils/ens/encodeLabelhash.d.ts +1 -1
  111. package/dist/types/utils/ens/encodeLabelhash.d.ts.map +1 -1
  112. package/dist/types/utils/ens/encodedLabelToLabelhash.d.ts +1 -1
  113. package/dist/types/utils/ens/encodedLabelToLabelhash.d.ts.map +1 -1
  114. package/dist/types/utils/formatters/transactionRequest.d.ts +5 -0
  115. package/dist/types/utils/formatters/transactionRequest.d.ts.map +1 -1
  116. package/dist/types/utils/index.d.ts +3 -1
  117. package/dist/types/utils/index.d.ts.map +1 -1
  118. package/package.json +1 -1
  119. package/src/actions/index.ts +15 -0
  120. package/src/actions/public/estimateFeesPerGas.ts +6 -4
  121. package/src/actions/public/estimateGas.ts +5 -5
  122. package/src/actions/public/estimateMaxPriorityFeePerGas.ts +7 -5
  123. package/src/actions/public/watchContractEvent.ts +9 -6
  124. package/src/{utils/transaction/prepareRequest.ts → actions/wallet/prepareTransactionRequest.ts} +80 -36
  125. package/src/actions/wallet/sendRawTransaction.ts +48 -0
  126. package/src/actions/wallet/sendTransaction.ts +6 -6
  127. package/src/actions/wallet/signTransaction.ts +137 -0
  128. package/src/chains/celo/formatters.ts +11 -12
  129. package/src/chains/celo/types.ts +86 -30
  130. package/src/chains/index.ts +1 -0
  131. package/src/chains/utils.ts +4 -4
  132. package/src/clients/decorators/public.ts +81 -0
  133. package/src/clients/decorators/wallet.ts +133 -0
  134. package/src/errors/rpc.ts +1 -1
  135. package/src/errors/version.ts +1 -1
  136. package/src/index.ts +7 -1
  137. package/src/types/chain.ts +2 -2
  138. package/src/types/eip1193.ts +1 -1
  139. package/src/utils/data/isBytesEqual.ts +4 -1
  140. package/src/utils/ens/encodeLabelhash.ts +1 -1
  141. package/src/utils/ens/encodedLabelToLabelhash.ts +2 -2
  142. package/src/utils/formatters/transactionRequest.ts +10 -0
  143. package/src/utils/index.ts +4 -1
  144. package/dist/cjs/utils/transaction/prepareRequest.js.map +0 -1
  145. package/dist/esm/utils/transaction/prepareRequest.js.map +0 -1
  146. package/dist/types/utils/transaction/prepareRequest.d.ts +0 -21
  147. package/dist/types/utils/transaction/prepareRequest.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EACL,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,KAAK,4BAA4B,EACjC,kBAAkB,EAClB,WAAW,EACX,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEjE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,SAAS,EACT,GAAG,GACJ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EACL,KAAK,6BAA6B,EAClC,mBAAmB,GACpB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,KAAK,4BAA4B,EACjC,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,KAAK,6BAA6B,EAClC,mBAAmB,GACpB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,0BAA0B,EAC/B,gBAAgB,GACjB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,KAAK,2BAA2B,EAChC,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,KAAK,2BAA2B,EAChC,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,KAAK,4BAA4B,EACjC,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,8BAA8B,EACnC,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,KAAK,oBAAoB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AAC5E,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,WAAW,GACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EACL,KAAK,2BAA2B,EAChC,wBAAwB,GACzB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,KAAK,2BAA2B,EAChC,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EACL,WAAW,EACX,OAAO,EACP,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,EACL,WAAW,EACX,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,OAAO,EACP,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,qBAAqB,GACtB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,gBAAgB,GACjB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,uBAAuB,GACxB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,eAAe,GAChB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACL,KAAK,4BAA4B,EACjC,4BAA4B,GAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACL,KAAK,kBAAkB,EACvB,kBAAkB,GACnB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,GAC5B,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -21,7 +21,7 @@
21
21
  "optional": true
22
22
  }
23
23
  },
24
- "version": "1.7.0",
24
+ "version": "1.8.1",
25
25
  "files": [
26
26
  "dist",
27
27
  "!dist/**/*.tsbuildinfo",
@@ -224,11 +224,26 @@ export {
224
224
  } from './test/inspectTxpool.js'
225
225
  export { type ResetParameters, reset } from './test/reset.js'
226
226
  export { type RevertParameters, revert } from './test/revert.js'
227
+ export {
228
+ type PrepareTransactionRequestParameters,
229
+ type PrepareTransactionRequestReturnType,
230
+ prepareTransactionRequest,
231
+ } from './wallet/prepareTransactionRequest.js'
227
232
  export {
228
233
  type SendTransactionParameters,
229
234
  type SendTransactionReturnType,
230
235
  sendTransaction,
231
236
  } from './wallet/sendTransaction.js'
237
+ export {
238
+ type SignTransactionParameters,
239
+ type SignTransactionReturnType,
240
+ signTransaction,
241
+ } from './wallet/signTransaction.js'
242
+ export {
243
+ type SendRawTransactionParameters,
244
+ type SendRawTransactionReturnType,
245
+ sendRawTransaction,
246
+ } from './wallet/sendRawTransaction.js'
232
247
  export {
233
248
  type SendUnsignedTransactionParameters,
234
249
  type SendUnsignedTransactionReturnType,
@@ -16,7 +16,7 @@ import type {
16
16
  FeeValuesLegacy,
17
17
  FeeValuesType,
18
18
  } from '../../types/fee.js'
19
- import type { PrepareRequestParameters } from '../../utils/transaction/prepareRequest.js'
19
+ import type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'
20
20
  import { internal_estimateMaxPriorityFeePerGas } from './estimateMaxPriorityFeePerGas.js'
21
21
  import { getBlock } from './getBlock.js'
22
22
  import { getGasPrice } from './getGasPrice.js'
@@ -85,7 +85,7 @@ export async function internal_estimateFeesPerGas<
85
85
  client: Client<Transport, chain>,
86
86
  args: EstimateFeesPerGasParameters<chain, chainOverride, type> & {
87
87
  block?: Block
88
- request?: PrepareRequestParameters
88
+ request?: PrepareTransactionRequestParameters
89
89
  },
90
90
  ): Promise<EstimateFeesPerGasReturnType<type>> {
91
91
  const {
@@ -131,13 +131,15 @@ export async function internal_estimateFeesPerGas<
131
131
  : await internal_estimateMaxPriorityFeePerGas(
132
132
  client as Client<Transport, Chain>,
133
133
  {
134
+ block,
134
135
  chain,
135
136
  request,
136
137
  },
137
138
  )
138
139
 
139
140
  const baseFeePerGas = multiply(block.baseFeePerGas)
140
- const maxFeePerGas = baseFeePerGas + maxPriorityFeePerGas
141
+ const maxFeePerGas =
142
+ request?.maxFeePerGas ?? baseFeePerGas + maxPriorityFeePerGas
141
143
 
142
144
  return {
143
145
  maxFeePerGas,
@@ -145,7 +147,7 @@ export async function internal_estimateFeesPerGas<
145
147
  } as EstimateFeesPerGasReturnType<type>
146
148
  }
147
149
 
148
- const gasPrice = multiply(await getGasPrice(client))
150
+ const gasPrice = request?.gasPrice ?? multiply(await getGasPrice(client))
149
151
  return {
150
152
  gasPrice,
151
153
  } as EstimateFeesPerGasReturnType<type>
@@ -21,9 +21,9 @@ import {
21
21
  assertRequest,
22
22
  } from '../../utils/transaction/assertRequest.js'
23
23
  import {
24
- type PrepareRequestParameters,
25
- prepareRequest,
26
- } from '../../utils/transaction/prepareRequest.js'
24
+ type PrepareTransactionRequestParameters,
25
+ prepareTransactionRequest,
26
+ } from '../wallet/prepareTransactionRequest.js'
27
27
 
28
28
  export type FormattedEstimateGas<
29
29
  TChain extends Chain | undefined = Chain | undefined,
@@ -107,9 +107,9 @@ export async function estimateGas<
107
107
  ...rest
108
108
  } =
109
109
  account.type === 'local'
110
- ? ((await prepareRequest(
110
+ ? ((await prepareTransactionRequest(
111
111
  client,
112
- args as PrepareRequestParameters,
112
+ args as PrepareTransactionRequestParameters,
113
113
  )) as EstimateGasParameters)
114
114
  : args
115
115
 
@@ -2,10 +2,11 @@ import type { Client } from '../../clients/createClient.js'
2
2
  import type { Transport } from '../../clients/transports/createTransport.js'
3
3
  import { Eip1559FeesNotSupportedError } from '../../errors/fee.js'
4
4
  import type { Account } from '../../types/account.js'
5
+ import type { Block } from '../../types/block.js'
5
6
  import type { Chain, ChainFeesFnParameters } from '../../types/chain.js'
6
7
  import type { GetChain } from '../../types/chain.js'
7
8
  import { hexToBigInt } from '../../utils/encoding/fromHex.js'
8
- import type { PrepareRequestParameters } from '../../utils/transaction/prepareRequest.js'
9
+ import type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'
9
10
  import { getBlock } from './getBlock.js'
10
11
  import { getGasPrice } from './getGasPrice.js'
11
12
 
@@ -53,16 +54,17 @@ export async function internal_estimateMaxPriorityFeePerGas<
53
54
  >(
54
55
  client: Client<Transport, chain>,
55
56
  args: EstimateMaxPriorityFeePerGasParameters<chain, chainOverride> & {
56
- request?: PrepareRequestParameters<
57
+ block?: Block
58
+ request?: PrepareTransactionRequestParameters<
57
59
  chain,
58
60
  Account | undefined,
59
61
  chainOverride
60
62
  >
61
63
  },
62
64
  ): Promise<EstimateMaxPriorityFeePerGasReturnType> {
63
- const { chain = client.chain, request } = args || {}
65
+ const { block: block_, chain = client.chain, request } = args || {}
64
66
  if (typeof chain?.fees?.defaultPriorityFee === 'function') {
65
- const block = await getBlock(client)
67
+ const block = block_ || (await getBlock(client))
66
68
  return chain.fees.defaultPriorityFee({
67
69
  block,
68
70
  client,
@@ -81,7 +83,7 @@ export async function internal_estimateMaxPriorityFeePerGas<
81
83
  // fall back to calculating it manually via `gasPrice - baseFeePerGas`.
82
84
  // See: https://github.com/ethereum/pm/issues/328#:~:text=eth_maxPriorityFeePerGas%20after%20London%20will%20effectively%20return%20eth_gasPrice%20%2D%20baseFee
83
85
  const [block, gasPrice] = await Promise.all([
84
- getBlock(client),
86
+ block_ ? Promise.resolve(block_) : getBlock(client),
85
87
  getGasPrice(client),
86
88
  ])
87
89
 
@@ -2,7 +2,6 @@ import type { Abi, AbiEvent, Address, ExtractAbiEvent } from 'abitype'
2
2
 
3
3
  import type { Client } from '../../clients/createClient.js'
4
4
  import type { Transport } from '../../clients/transports/createTransport.js'
5
- import type { EncodeEventTopicsParameters, LogTopic } from '../../index.js'
6
5
  import type { Chain } from '../../types/chain.js'
7
6
  import type { GetEventArgs, InferEventName } from '../../types/contract.js'
8
7
  import type { Filter } from '../../types/filter.js'
@@ -17,14 +16,18 @@ import { observe } from '../../utils/observe.js'
17
16
  import { poll } from '../../utils/poll.js'
18
17
  import { stringify } from '../../utils/stringify.js'
19
18
 
20
- import { DecodeLogDataMismatch } from '../../errors/abi.js'
21
19
  import {
20
+ DecodeLogDataMismatch,
22
21
  DecodeLogTopicsMismatch,
23
- InvalidInputRpcError,
24
- decodeEventLog,
22
+ } from '../../errors/abi.js'
23
+ import { InvalidInputRpcError } from '../../errors/rpc.js'
24
+ import type { LogTopic } from '../../types/misc.js'
25
+ import { decodeEventLog } from '../../utils/abi/decodeEventLog.js'
26
+ import {
27
+ type EncodeEventTopicsParameters,
25
28
  encodeEventTopics,
26
- formatLog,
27
- } from '../../index.js'
29
+ } from '../../utils/abi/encodeEventTopics.js'
30
+ import { formatLog } from '../../utils/formatters/log.js'
28
31
  import {
29
32
  type CreateContractEventFilterParameters,
30
33
  createContractEventFilter,
@@ -1,5 +1,3 @@
1
- import type { Address } from 'abitype'
2
-
3
1
  import type { Account } from '../../accounts/types.js'
4
2
  import { parseAccount } from '../../accounts/utils/parseAccount.js'
5
3
  import { internal_estimateFeesPerGas } from '../../actions/public/estimateFeesPerGas.js'
@@ -9,7 +7,6 @@ import {
9
7
  } from '../../actions/public/estimateGas.js'
10
8
  import { getBlock } from '../../actions/public/getBlock.js'
11
9
  import { getTransactionCount } from '../../actions/public/getTransactionCount.js'
12
- import type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'
13
10
  import type { Client } from '../../clients/createClient.js'
14
11
  import type { Transport } from '../../clients/transports/createTransport.js'
15
12
  import { AccountNotFoundError } from '../../errors/account.js'
@@ -20,11 +17,14 @@ import {
20
17
  import type { GetAccountParameter } from '../../types/account.js'
21
18
  import type { Chain } from '../../types/chain.js'
22
19
  import type { GetChain } from '../../types/chain.js'
20
+ import type { TransactionSerializable } from '../../types/transaction.js'
23
21
  import type { UnionOmit } from '../../types/utils.js'
24
- import { type FormattedTransactionRequest } from '../index.js'
25
- import { type AssertRequestParameters, assertRequest } from './assertRequest.js'
22
+ import type { FormattedTransactionRequest } from '../../utils/formatters/transactionRequest.js'
23
+ import type { AssertRequestParameters } from '../../utils/transaction/assertRequest.js'
24
+ import { assertRequest } from '../../utils/transaction/assertRequest.js'
25
+ import { getTransactionType } from '../../utils/transaction/getTransactionType.js'
26
26
 
27
- export type PrepareRequestParameters<
27
+ export type PrepareTransactionRequestParameters<
28
28
  TChain extends Chain | undefined = Chain | undefined,
29
29
  TAccount extends Account | undefined = Account | undefined,
30
30
  TChainOverride extends Chain | undefined = Chain | undefined,
@@ -37,34 +37,70 @@ export type PrepareRequestParameters<
37
37
  GetAccountParameter<TAccount> &
38
38
  GetChain<TChain, TChainOverride>
39
39
 
40
- export type PrepareRequestReturnType<
40
+ export type PrepareTransactionRequestReturnType<
41
41
  TChain extends Chain | undefined = Chain | undefined,
42
42
  TAccount extends Account | undefined = Account | undefined,
43
43
  TChainOverride extends Chain | undefined = Chain | undefined,
44
- TArgs extends PrepareRequestParameters<
45
- TChain,
46
- TAccount,
47
- TChainOverride
48
- > = PrepareRequestParameters<TChain, TAccount, TChainOverride>,
49
- > = TArgs & {
50
- from: Address
51
- gas: SendTransactionParameters['gas']
52
- gasPrice?: SendTransactionParameters['gasPrice']
53
- maxFeePerGas?: SendTransactionParameters['maxFeePerGas']
54
- maxPriorityFeePerGas?: SendTransactionParameters['maxPriorityFeePerGas']
55
- nonce: SendTransactionParameters['nonce']
56
- }
44
+ > = UnionOmit<
45
+ FormattedTransactionRequest<
46
+ TChainOverride extends Chain ? TChainOverride : TChain
47
+ >,
48
+ 'from'
49
+ > &
50
+ GetAccountParameter<TAccount> &
51
+ GetChain<TChain, TChainOverride>
57
52
 
58
- export async function prepareRequest<
53
+ /**
54
+ * Prepares a transaction request for signing.
55
+ *
56
+ * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest.html
57
+ *
58
+ * @param args - {@link PrepareTransactionRequestParameters}
59
+ * @returns The transaction request. {@link PrepareTransactionRequestReturnType}
60
+ *
61
+ * @example
62
+ * import { createWalletClient, custom } from 'viem'
63
+ * import { mainnet } from 'viem/chains'
64
+ * import { prepareTransactionRequest } from 'viem/actions'
65
+ *
66
+ * const client = createWalletClient({
67
+ * chain: mainnet,
68
+ * transport: custom(window.ethereum),
69
+ * })
70
+ * const request = await prepareTransactionRequest(client, {
71
+ * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
72
+ * to: '0x0000000000000000000000000000000000000000',
73
+ * value: 1n,
74
+ * })
75
+ *
76
+ * @example
77
+ * // Account Hoisting
78
+ * import { createWalletClient, http } from 'viem'
79
+ * import { privateKeyToAccount } from 'viem/accounts'
80
+ * import { mainnet } from 'viem/chains'
81
+ * import { prepareTransactionRequest } from 'viem/actions'
82
+ *
83
+ * const client = createWalletClient({
84
+ * account: privateKeyToAccount('0x…'),
85
+ * chain: mainnet,
86
+ * transport: custom(window.ethereum),
87
+ * })
88
+ * const request = await prepareTransactionRequest(client, {
89
+ * to: '0x0000000000000000000000000000000000000000',
90
+ * value: 1n,
91
+ * })
92
+ */
93
+ export async function prepareTransactionRequest<
59
94
  TChain extends Chain | undefined,
60
95
  TAccount extends Account | undefined,
61
96
  TChainOverride extends Chain | undefined,
62
- TArgs extends PrepareRequestParameters<TChain, TAccount, TChainOverride>,
63
97
  >(
64
98
  client: Client<Transport, TChain, TAccount>,
65
- args: TArgs,
66
- ): Promise<PrepareRequestReturnType<TChain, TAccount, TChainOverride, TArgs>> {
67
- const { account: account_, chain, gas, gasPrice, nonce } = args
99
+ args: PrepareTransactionRequestParameters<TChain, TAccount, TChainOverride>,
100
+ ): Promise<
101
+ PrepareTransactionRequestReturnType<TChain, TAccount, TChainOverride>
102
+ > {
103
+ const { account: account_ = client.account, chain, gas, nonce, type } = args
68
104
  if (!account_) throw new AccountNotFoundError()
69
105
  const account = parseAccount(account_)
70
106
 
@@ -78,16 +114,25 @@ export async function prepareRequest<
78
114
  blockTag: 'pending',
79
115
  })
80
116
 
81
- if (
82
- typeof block.baseFeePerGas === 'bigint' &&
83
- typeof gasPrice === 'undefined'
84
- ) {
117
+ if (typeof type === 'undefined') {
118
+ try {
119
+ request.type = getTransactionType(
120
+ request as TransactionSerializable,
121
+ ) as any
122
+ } catch {
123
+ // infer type from block
124
+ request.type =
125
+ typeof block.baseFeePerGas === 'bigint' ? 'eip1559' : 'legacy'
126
+ }
127
+ }
128
+
129
+ if (request.type === 'eip1559') {
85
130
  // EIP-1559 fees
86
131
  const { maxFeePerGas, maxPriorityFeePerGas } =
87
132
  await internal_estimateFeesPerGas(client, {
88
133
  block,
89
134
  chain,
90
- request: request as PrepareRequestParameters,
135
+ request: request as PrepareTransactionRequestParameters,
91
136
  })
92
137
 
93
138
  if (
@@ -100,8 +145,8 @@ export async function prepareRequest<
100
145
  })
101
146
 
102
147
  request.maxPriorityFeePerGas = maxPriorityFeePerGas
103
- request.maxFeePerGas = args.maxFeePerGas ?? maxFeePerGas
104
- } else if (typeof gasPrice === 'undefined') {
148
+ request.maxFeePerGas = maxFeePerGas
149
+ } else {
105
150
  // Legacy fees
106
151
  if (
107
152
  typeof args.maxFeePerGas !== 'undefined' ||
@@ -112,7 +157,7 @@ export async function prepareRequest<
112
157
  const { gasPrice: gasPrice_ } = await internal_estimateFeesPerGas(client, {
113
158
  block,
114
159
  chain,
115
- request: request as PrepareRequestParameters,
160
+ request: request as PrepareTransactionRequestParameters,
116
161
  type: 'legacy',
117
162
  })
118
163
  request.gasPrice = gasPrice_
@@ -126,10 +171,9 @@ export async function prepareRequest<
126
171
 
127
172
  assertRequest(request as AssertRequestParameters)
128
173
 
129
- return request as PrepareRequestReturnType<
174
+ return request as PrepareTransactionRequestReturnType<
130
175
  TChain,
131
176
  TAccount,
132
- TChainOverride,
133
- TArgs
177
+ TChainOverride
134
178
  >
135
179
  }
@@ -0,0 +1,48 @@
1
+ import type { Client } from '../../clients/createClient.js'
2
+ import type { Transport } from '../../clients/transports/createTransport.js'
3
+ import type { Chain } from '../../types/chain.js'
4
+ import type { Hash } from '../../types/misc.js'
5
+ import type { TransactionSerialized } from '../../types/transaction.js'
6
+
7
+ export type SendRawTransactionParameters = {
8
+ /**
9
+ * The signed serialized tranasction.
10
+ */
11
+ serializedTransaction: TransactionSerialized
12
+ }
13
+
14
+ export type SendRawTransactionReturnType = Hash
15
+
16
+ /**
17
+ * Sends a **signed** transaction to the network
18
+ *
19
+ * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction.html
20
+ * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)
21
+ *
22
+ * @param client - Client to use
23
+ * @param parameters - {@link SendRawTransactionParameters}
24
+ * @returns The transaction hash. {@link SendRawTransactionReturnType}
25
+ *
26
+ * @example
27
+ * import { createWalletClient, custom } from 'viem'
28
+ * import { mainnet } from 'viem/chains'
29
+ * import { sendRawTransaction } from 'viem/wallet'
30
+ *
31
+ * const client = createWalletClient({
32
+ * chain: mainnet,
33
+ * transport: custom(window.ethereum),
34
+ * })
35
+ *
36
+ * const hash = await sendRawTransaction(client, {
37
+ * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'
38
+ * })
39
+ */
40
+ export async function sendRawTransaction<TChain extends Chain | undefined,>(
41
+ client: Client<Transport, TChain>,
42
+ { serializedTransaction }: SendRawTransactionParameters,
43
+ ): Promise<SendRawTransactionReturnType> {
44
+ return client.request({
45
+ method: 'eth_sendRawTransaction',
46
+ params: [serializedTransaction],
47
+ })
48
+ }
@@ -24,8 +24,9 @@ import {
24
24
  type AssertRequestParameters,
25
25
  assertRequest,
26
26
  } from '../../utils/transaction/assertRequest.js'
27
- import { prepareRequest } from '../../utils/transaction/prepareRequest.js'
28
27
  import { getChainId } from '../public/getChainId.js'
28
+ import { prepareTransactionRequest } from './prepareTransactionRequest.js'
29
+ import { sendRawTransaction } from './sendRawTransaction.js'
29
30
 
30
31
  export type SendTransactionParameters<
31
32
  TChain extends Chain | undefined = Chain | undefined,
@@ -130,7 +131,7 @@ export async function sendTransaction<
130
131
 
131
132
  if (account.type === 'local') {
132
133
  // Prepare the request for signing (assign appropriate fees, etc.)
133
- const request = await prepareRequest(client, {
134
+ const request = await prepareTransactionRequest(client, {
134
135
  account,
135
136
  accessList,
136
137
  chain,
@@ -148,16 +149,15 @@ export async function sendTransaction<
148
149
  if (!chainId) chainId = await getChainId(client)
149
150
 
150
151
  const serializer = chain?.serializers?.transaction
151
- const signedRequest = (await account.signTransaction(
152
+ const serializedTransaction = (await account.signTransaction(
152
153
  {
153
154
  ...request,
154
155
  chainId,
155
156
  } as TransactionSerializable,
156
157
  { serializer },
157
158
  )) as Hash
158
- return await client.request({
159
- method: 'eth_sendRawTransaction',
160
- params: [signedRequest],
159
+ return await sendRawTransaction(client, {
160
+ serializedTransaction,
161
161
  })
162
162
  }
163
163
 
@@ -0,0 +1,137 @@
1
+ import type { Account } from '../../accounts/types.js'
2
+ import { parseAccount } from '../../accounts/utils/parseAccount.js'
3
+ import type { Client } from '../../clients/createClient.js'
4
+ import type { Transport } from '../../clients/transports/createTransport.js'
5
+ import { AccountNotFoundError } from '../../errors/account.js'
6
+ import type { GetAccountParameter } from '../../types/account.js'
7
+ import type { Chain, GetChain } from '../../types/chain.js'
8
+ import { type RpcTransactionRequest } from '../../types/rpc.js'
9
+ import type {
10
+ TransactionRequest,
11
+ TransactionSerializable,
12
+ TransactionSerialized,
13
+ } from '../../types/transaction.js'
14
+ import type { UnionOmit } from '../../types/utils.js'
15
+ import { assertCurrentChain } from '../../utils/chain.js'
16
+ import {
17
+ type FormattedTransactionRequest,
18
+ formatTransactionRequest,
19
+ } from '../../utils/formatters/transactionRequest.js'
20
+ import { numberToHex } from '../../utils/index.js'
21
+ import { assertRequest } from '../../utils/transaction/assertRequest.js'
22
+ import { getChainId } from '../public/getChainId.js'
23
+
24
+ export type SignTransactionParameters<
25
+ TChain extends Chain | undefined = Chain | undefined,
26
+ TAccount extends Account | undefined = Account | undefined,
27
+ TChainOverride extends Chain | undefined = Chain | undefined,
28
+ > = UnionOmit<
29
+ FormattedTransactionRequest<
30
+ TChainOverride extends Chain ? TChainOverride : TChain
31
+ >,
32
+ 'from'
33
+ > &
34
+ GetAccountParameter<TAccount> &
35
+ GetChain<TChain, TChainOverride>
36
+
37
+ export type SignTransactionReturnType = TransactionSerialized
38
+
39
+ /**
40
+ * Signs a transaction.
41
+ *
42
+ * - Docs: https://viem.sh/docs/actions/wallet/signTransaction.html
43
+ * - JSON-RPC Methods:
44
+ * - JSON-RPC Accounts: [`eth_signTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)
45
+ * - Local Accounts: Signs locally. No JSON-RPC request.
46
+ *
47
+ * @param args - {@link SignTransactionParameters}
48
+ * @returns The signed serialized tranasction. {@link SignTransactionReturnType}
49
+ *
50
+ * @example
51
+ * import { createWalletClient, custom } from 'viem'
52
+ * import { mainnet } from 'viem/chains'
53
+ * import { signTransaction } from 'viem/actions'
54
+ *
55
+ * const client = createWalletClient({
56
+ * chain: mainnet,
57
+ * transport: custom(window.ethereum),
58
+ * })
59
+ * const signature = await signTransaction(client, {
60
+ * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
61
+ * to: '0x0000000000000000000000000000000000000000',
62
+ * value: 1n,
63
+ * })
64
+ *
65
+ * @example
66
+ * // Account Hoisting
67
+ * import { createWalletClient, http } from 'viem'
68
+ * import { privateKeyToAccount } from 'viem/accounts'
69
+ * import { mainnet } from 'viem/chains'
70
+ * import { signTransaction } from 'viem/actions'
71
+ *
72
+ * const client = createWalletClient({
73
+ * account: privateKeyToAccount('0x…'),
74
+ * chain: mainnet,
75
+ * transport: custom(window.ethereum),
76
+ * })
77
+ * const signature = await signTransaction(client, {
78
+ * to: '0x0000000000000000000000000000000000000000',
79
+ * value: 1n,
80
+ * })
81
+ */
82
+ export async function signTransaction<
83
+ TChain extends Chain | undefined,
84
+ TAccount extends Account | undefined,
85
+ TChainOverride extends Chain | undefined,
86
+ >(
87
+ client: Client<Transport, TChain, TAccount>,
88
+ args: SignTransactionParameters<TChain, TAccount, TChainOverride>,
89
+ ): Promise<SignTransactionReturnType> {
90
+ const {
91
+ account: account_ = client.account,
92
+ chain = client.chain,
93
+ ...transaction
94
+ } = args
95
+
96
+ if (!account_)
97
+ throw new AccountNotFoundError({
98
+ docsPath: '/docs/actions/wallet/signTransaction',
99
+ })
100
+ const account = parseAccount(account_)
101
+
102
+ assertRequest({
103
+ account,
104
+ ...args,
105
+ })
106
+
107
+ const chainId = await getChainId(client)
108
+ if (chain !== null)
109
+ assertCurrentChain({
110
+ currentChainId: chainId,
111
+ chain,
112
+ })
113
+
114
+ const formatters = chain?.formatters || client.chain?.formatters
115
+ const format =
116
+ formatters?.transactionRequest?.format || formatTransactionRequest
117
+
118
+ if (account.type === 'local')
119
+ return account.signTransaction(
120
+ {
121
+ chainId,
122
+ ...transaction,
123
+ } as unknown as TransactionSerializable,
124
+ { serializer: client.chain?.serializers?.transaction },
125
+ ) as Promise<SignTransactionReturnType>
126
+
127
+ return await client.request({
128
+ method: 'eth_signTransaction',
129
+ params: [
130
+ {
131
+ ...format(transaction as unknown as TransactionRequest),
132
+ chainId: numberToHex(chainId),
133
+ from: account.address,
134
+ } as unknown as RpcTransactionRequest,
135
+ ],
136
+ })
137
+ }