broadcast.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* Import modules. */
  2. // import { sha256 } from '@nexajs/crypto'
  3. // import { encodePrivateKeyWif } from '@nexajs/hdnode'
  4. import { encodeAddress } from '@nexajs/address'
  5. // import { sha256 } from '@nexajs/crypto'
  6. import {
  7. getCoins,
  8. sendCoins,
  9. } from '@nexajs/purse'
  10. import {
  11. encodeDataPush,
  12. encodeNullData,
  13. OP,
  14. } from '@nexajs/script'
  15. import {
  16. getTokens,
  17. sendToken,
  18. } from '@nexajs/token'
  19. // const TOKEN_ID_HEX = '57f46c1766dc0087b207acde1b3372e9f90b18c7e67242657344dcd2af660000' // AVAS
  20. const TOKEN_ID_HEX = '9732745682001b06e332b6a4a0dd0fffc4837c707567f8cbfe0f6a9b12080000' // STUDIO
  21. export default async function (_receivers) {
  22. /* Initialize locals. */
  23. let body
  24. let coins
  25. let nexaAddress
  26. let nullData
  27. // let publicKey
  28. let publicKeyHash
  29. let receivers
  30. let response
  31. let scriptPubKey
  32. // let scriptPushPubKey
  33. let tokens
  34. let txResult
  35. let userData
  36. // let wif
  37. console.info('\n Nexa address:', this.address)
  38. coins = await getCoins(this.wif)
  39. .catch(err => console.error(err))
  40. console.log('\n Coins:', coins)
  41. tokens = await getTokens(this.wif)
  42. .catch(err => console.error(err))
  43. console.log('\n Tokens:', tokens)
  44. /* Filter tokens. */
  45. // NOTE: Currently limited to a "single" Id.
  46. tokens = tokens.filter(_token => {
  47. return _token.tokenidHex === TOKEN_ID_HEX
  48. })
  49. console.log('\n Tokens (filtered):', tokens)
  50. userData = [
  51. 'RAIN',
  52. `$STUDIO Telegram Airdrop`,
  53. ]
  54. /* Initialize hex data. */
  55. nullData = encodeNullData(userData)
  56. receivers = [
  57. {
  58. data: nullData,
  59. },
  60. ]
  61. _receivers.forEach(_receiver => {
  62. receivers.push( {
  63. address: _receiver.address,
  64. tokenid: TOKEN_ID_HEX, // TODO Allow auto-format conversion.
  65. tokens: BigInt(_receiver.tokens),
  66. },
  67. )
  68. })
  69. receivers.push({
  70. address: this.address,
  71. })
  72. console.log('\n Receivers:', receivers)
  73. // return
  74. /* Send UTXO request. */
  75. response = await sendToken(coins, tokens, receivers)
  76. console.log('Send UTXO (response):', response)
  77. try {
  78. txResult = JSON.parse(response)
  79. console.log('TX RESULT', txResult)
  80. if (txResult.error) {
  81. console.error(txResult.error)
  82. }
  83. } catch (err) {
  84. console.error(err)
  85. }
  86. return txResult
  87. }