From 326aee885a0ced4d810379fc328477a1df7cafbe Mon Sep 17 00:00:00 2001 From: Andrea Scartabelli Date: Wed, 13 Nov 2024 07:41:04 +0100 Subject: [PATCH] web-wallet: Retrieve and cache stake info using w3sper Resolves @2946 --- .../lib/vendor/w3sper.js/src/bookkeeper.js | 15 +- .../lib/vendor/w3sper.js/src/encoders/b16.js | 26 +++ .../w3sper.js/src/{ => encoders}/b58.js | 0 .../vendor/w3sper.js/src/{network => }/gas.js | 0 .../src/network/components/contracts.js | 6 + .../src/network/components/transactions.js | 42 ++++- .../lib/vendor/w3sper.js/src/network/mod.js | 2 +- .../w3sper.js/src/network/syncer/account.js | 160 ++++++++++++++++-- .../src/lib/vendor/w3sper.js/src/profile.js | 2 +- .../w3sper.js/src/protocol-driver/mod.js | 36 +++- .../lib/vendor/w3sper.js/src/rues/event.js | 39 ++--- .../src/lib/vendor/w3sper.js/src/rues/mod.js | 22 ++- .../lib/vendor/w3sper.js/src/rues/scope.js | 16 ++ .../lib/vendor/w3sper.js/src/transaction.js | 13 +- web-wallet/src/lib/vendor/wallet_core.wasm | Bin 294942 -> 295284 bytes 15 files changed, 334 insertions(+), 45 deletions(-) create mode 100644 web-wallet/src/lib/vendor/w3sper.js/src/encoders/b16.js rename web-wallet/src/lib/vendor/w3sper.js/src/{ => encoders}/b58.js (100%) rename web-wallet/src/lib/vendor/w3sper.js/src/{network => }/gas.js (100%) create mode 100644 web-wallet/src/lib/vendor/w3sper.js/src/rues/scope.js diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js b/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js index 648a4c1a32..0cf7febf51 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js @@ -22,10 +22,14 @@ class BookEntry { Object.freeze(this); } - async balance(type) { + balance(type) { return this.bookkeeper.balance(this.profile[type]); } + stakeInfo() { + return this.bookkeeper.stakeInfo(this.profile.account); + } + transfer(amount) { return new Transfer(this).amount(amount); } @@ -60,6 +64,15 @@ export class Bookkeeper { } } + stakeInfo(identifier) { + const type = ProfileGenerator.typeOf(String(identifier)); + if (type !== "account") { + throw new TypeError("Only accounts can stake"); + } + + return this.#treasury.stakeInfo(identifier); + } + async pick(identifier, amount) { const notes = await this.#treasury.address(identifier); const seed = await ProfileGenerator.seedFrom(identifier); diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/encoders/b16.js b/web-wallet/src/lib/vendor/w3sper.js/src/encoders/b16.js new file mode 100644 index 0000000000..ea47f5ee33 --- /dev/null +++ b/web-wallet/src/lib/vendor/w3sper.js/src/encoders/b16.js @@ -0,0 +1,26 @@ +// @ts-nocheck +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// +// Copyright (c) DUSK NETWORK. All rights reserved. + +export const encode = (buffer) => + Array.from(buffer) + .map((byte) => byte.toString(16).padStart(2, "0")) + .join(""); + +export function decode(string) { + // Check if the string has an even length and contains only valid hex characters + if (string.length % 2 !== 0 || !/^[\da-fA-F]+$/.test(string)) { + return null; + } + + const buffer = new Uint8Array(string.length / 2); + + for (let i = 0; i < string.length; i += 2) { + buffer[i / 2] = parseInt(string.slice(i, i + 2), 16); + } + + return buffer; +} diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/b58.js b/web-wallet/src/lib/vendor/w3sper.js/src/encoders/b58.js similarity index 100% rename from web-wallet/src/lib/vendor/w3sper.js/src/b58.js rename to web-wallet/src/lib/vendor/w3sper.js/src/encoders/b58.js diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/gas.js b/web-wallet/src/lib/vendor/w3sper.js/src/gas.js similarity index 100% rename from web-wallet/src/lib/vendor/w3sper.js/src/network/gas.js rename to web-wallet/src/lib/vendor/w3sper.js/src/gas.js diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/components/contracts.js b/web-wallet/src/lib/vendor/w3sper.js/src/network/components/contracts.js index 51177c2d43..f2c4ff6689 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/network/components/contracts.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/network/components/contracts.js @@ -35,4 +35,10 @@ export class Contracts { "0100000000000000000000000000000000000000000000000000000000000000" ); } + + get stakeContract() { + return this.withId( + "0200000000000000000000000000000000000000000000000000000000000000" + ); + } } diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/components/transactions.js b/web-wallet/src/lib/vendor/w3sper.js/src/network/components/transactions.js index 241a4cf097..039ddf6d4f 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/network/components/transactions.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/network/components/transactions.js @@ -5,11 +5,40 @@ // // Copyright (c) DUSK NETWORK. All rights reserved. -export class Transactions { +import { Gas } from "../../gas.js"; +import { RuesScope } from "../../rues/scope.js"; +import { RuesEvent } from "../../rues/event.js"; +import * as base16 from "../../encoders/b16.js"; + +class TransactionExecutedEvent extends RuesEvent { + constructor(type) { + super(type); + } + + get gasPaid() { + return new Gas({ + limit: this.payload["gas_spent"], + price: this.payload.inner.fee["gas_price"], + }).total; + } + + memo(options = {}) { + const buffer = base16.decode(this.payload.inner.memo); + + if (options.as === "string") { + return new TextDecoder().decode(buffer); + } + + return buffer; + } +} + +export class Transactions extends RuesScope { #scope = null; constructor(rues) { - this.#scope = rues.scope("transactions"); + super("transactions"); + this.#scope = rues.scope(this); } preverify(tx) { @@ -45,4 +74,13 @@ export class Transactions { withId(id) { return this.#scope.withId(id); } + + eventFrom(ruesEvent) { + switch (ruesEvent.origin.topic) { + case "executed": + return TransactionExecutedEvent.from(ruesEvent); + } + + return ruesEvent; + } } diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js b/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js index d7dd68abed..1f2484e0ed 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js @@ -12,7 +12,7 @@ import { Node } from "./components/node.js"; import { Blocks } from "./components/blocks.js"; import { Transactions } from "./components/transactions.js"; import { Contracts } from "./components/contracts.js"; -import { Gas } from "./gas.js"; +import { Gas } from "../gas.js"; export { Gas }; export { AddressSyncer } from "./syncer/address.js"; diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/syncer/account.js b/web-wallet/src/lib/vendor/w3sper.js/src/network/syncer/account.js index 4702b79d1f..191c316616 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/network/syncer/account.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/network/syncer/account.js @@ -6,8 +6,93 @@ // Copyright (c) DUSK NETWORK. All rights reserved. import * as ProtocolDriver from "../../protocol-driver/mod.js"; -import * as base58 from "../../b58.js"; +import * as base58 from "../../encoders/b58.js"; +/** + * Represents the value staked, locked, and eligibility of a stake. + */ +class StakeAmount { + /** @type {bigint} */ + value = 0n; + /** @type {bigint} */ + locked = 0n; + /** @type {bigint} */ + eligibility = 0n; + + /** + * Returns the total amount of staked value, including locked value. + * + * @returns {bigint} Total staked amount. + */ + get total() { + return this.value + this.locked; + } +} + +/** + * Holds information about a user's stake, including amount, reward, + * and a nonce to prevent repeat attacks. Also tracks faults. + */ +class StakeInfo { + /** @type {StakeAmount|null} */ + amount; + /** @type {bigint} */ + reward; + /** @type {bigint} */ + nonce; + /** @type {number} */ + faults; + /** @type {number} */ + hardFaults; + + constructor() { + this.amount = null; + this.reward = 0n; + this.nonce = 0n; + this.faults = 0; + this.hardFaults = 0; + } + + /** + * Parses a buffer into a {StakeInfo} instance. + * + * @param {ArrayBuffer} buffer - The buffer containing stake data. + * @returns {StakeInfo} The parsed {StakeInfo} instance. + */ + static parse(buffer) { + const view = new DataView(buffer); + const stakeInfo = new StakeInfo(); + const hasStake = view.getUint8(0) === 1; + + if (!hasStake) { + return Object.freeze(stakeInfo); + } + + const hasStakeAmount = view.getUint8(8) === 1; + + if (hasStakeAmount) { + stakeInfo.amount = new StakeAmount(); + stakeInfo.amount.value = view.getBigUint64(16, true); + stakeInfo.amount.locked = view.getBigUint64(24, true); + stakeInfo.amount.eligibility = view.getBigUint64(32, true); + } + + stakeInfo.reward = view.getBigUint64(40, true); + stakeInfo.nonce = view.getBigUint64(48, true); + stakeInfo.faults = view.getUint8(56); + stakeInfo.hardFaults = view.getUint8(57); + + return Object.freeze(stakeInfo); + } +} + +/** + * Converts a resource, either a string or an object with an account, + * into an account buffer if it has a byteLength of 96. + * + * @param {Object|string} resource - The resource to convert. + * @returns {ArrayBuffer|Object|string} The account buffer or the resource. + */ function intoAccount(resource) { if (resource?.account?.valueOf()?.byteLength === 96) { return resource.account; @@ -21,31 +106,82 @@ function intoAccount(resource) { return resource; } +/** + * Converts account profiles into raw representations. + * + * @param {Array} profiles - Array of profile objects. + * @returns {Promise>} The raw account buffers. + */ +const accountsIntoRaw = (profiles) => + ProtocolDriver.accountsIntoRaw(profiles.map(intoAccount)); + +/** + * Parses a buffer to extract account balance information. + * + * @param {ArrayBuffer} buffer - The buffer containing balance data. + * @returns {{ nonce: bigint, value: bigint }} The parsed balance data. + */ +const parseBalance = (buffer) => { + const view = new DataView(buffer); + const nonce = view.getBigUint64(0, true); + const value = view.getBigUint64(8, true); + + return { nonce, value }; +}; + +/** + * Syncs account data by querying the network for balance and stake information. + * + * @extends EventTarget + */ export class AccountSyncer extends EventTarget { + /** @type {Object} */ #network; + /** + * Creates an AccountSyncer instance. + * @param {Object} network - The network interface for accessing accounts. + */ constructor(network) { super(); this.#network = network; } + /** + * Fetches the balances for the given profiles. + * + * @param {Array} profiles - Array of profile objects. + * @returns {Promise>} Array of balances. + */ async balances(profiles) { - const rawUsers = await ProtocolDriver.accountsIntoRaw( - profiles.map(intoAccount) + const balances = await accountsIntoRaw(profiles).then((rawUsers) => + rawUsers.map((user) => + this.#network.contracts.transferContract.call.account(user) + ) ); - let balances = rawUsers.map((user) => - this.#network.contracts.transferContract.call.account(user) + return Promise.all(balances) + .then((responses) => responses.map((resp) => resp.arrayBuffer())) + .then((buffers) => Promise.all(buffers)) + .then((buffers) => buffers.map(parseBalance)); + } + + /** + * Fetches the stakes for the given profiles. + * + * @param {Array} profiles - Array of profile objects. + * @returns {Promise>} Array of parsed stake information. + */ + async stakes(profiles) { + const stakes = await accountsIntoRaw(profiles).then((rawUsers) => + rawUsers.map((user) => + this.#network.contracts.stakeContract.call.get_stake(user) + ) ); - return await Promise.all(balances) + return Promise.all(stakes) .then((responses) => responses.map((resp) => resp.arrayBuffer())) .then((buffers) => Promise.all(buffers)) - .then((buffers) => - buffers.map((buffer) => ({ - nonce: new DataView(buffer).getBigUint64(0, true), - value: new DataView(buffer).getBigUint64(8, true), - })) - ); + .then((buffers) => buffers.map(StakeInfo.parse)); } } diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/profile.js b/web-wallet/src/lib/vendor/w3sper.js/src/profile.js index 4d0cc8b6ac..ada3a4750f 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/profile.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/profile.js @@ -6,7 +6,7 @@ // Copyright (c) DUSK NETWORK. All rights reserved. import * as ProtocolDriver from "../src/protocol-driver/mod.js"; -import * as base58 from "./b58.js"; +import * as base58 from "./encoders/b58.js"; const _index = Symbol("profile::index"); const _seeder = Symbol("profile::seeder"); diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js b/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js index 6bd242209f..a3ead4b0e9 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js @@ -574,6 +574,15 @@ export const moonlight = async (info) => let tx = await malloc(4); let hash = await malloc(64); + const data = serializeMemo(info.data); + + if (data) { + ptr.data = await malloc(data.byteLength); + await memcpy(ptr.data, data); + } else { + ptr.data = null; + } + // Copy the value to the WASM memory const code = await moonlight( ptr.seed, @@ -585,7 +594,7 @@ export const moonlight = async (info) => ptr.gas_price, ptr.nonce, info.chainId, - info.data, + ptr.data, tx, hash ); @@ -783,3 +792,28 @@ export const shield = async (info) => hash = new TextDecoder().decode(await memcpy(null, hash, 64)); return [tx_buffer, hash]; })(); + +function serializeMemo(memo) { + if (!memo) { + return null; + } + + let buffer = null; + if (typeof memo === "string") { + buffer = new TextEncoder().encode(memo); + } else if (memo instanceof ArrayBuffer) { + buffer = new Uint8Array(memo); + } else if (memo instanceof Uint8Array) { + buffer = memo; + } + + if (!buffer) { + return null; + } + + const memoBuffer = new Uint8Array(1 + buffer.byteLength); + memoBuffer[0] = 3; // Memo type + memoBuffer.set(buffer, 1); + + return new Uint8Array(DataBuffer.from(memoBuffer)); +} diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/rues/event.js b/web-wallet/src/lib/vendor/w3sper.js/src/rues/event.js index c09cba2575..8c545b4dbc 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/rues/event.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/rues/event.js @@ -53,16 +53,19 @@ export class RuesEvent extends Event { } static from(event, options = {}) { + let headers; + let payload; + if (event instanceof MessageEvent) { const { data } = event; const headersLength = new DataView(data).getUint32(0, true); const headersBuffer = new Uint8Array(data, 4, headersLength); - const headers = new Headers( + + headers = new Headers( JSON.parse(new TextDecoder().decode(headersBuffer)) ); const body = new Uint8Array(data, 4 + headersLength); - let payload; switch (headers.get("content-type")) { case "application/json": payload = JSON.parse(new TextDecoder().decode(body)); @@ -77,28 +80,20 @@ export class RuesEvent extends Event { payload = body; } } - - let type = new RuesEventOrigin( - headers.get("content-location"), - options - ).toString(); - - const ruesEvent = new RuesEvent(type); - ruesEvent.#headers = headers; - ruesEvent.#payload = payload; - - return ruesEvent; } else if (event instanceof RuesEvent) { - let type = new RuesEventOrigin( - event.headers.get("content-location"), - options - ).toString(); + headers = event.headers; + payload = event.payload; + } - const ruesEvent = new RuesEvent(type); - ruesEvent.#headers = event.headers; - ruesEvent.#payload = event.payload; + let type = new RuesEventOrigin( + headers.get("content-location"), + options + ).toString(); - return ruesEvent; - } + const ruesEvent = new this(type); + ruesEvent.#headers = headers; + ruesEvent.#payload = payload; + + return ruesEvent; } } diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/rues/mod.js b/web-wallet/src/lib/vendor/w3sper.js/src/rues/mod.js index 17e8a3c620..1c4ed4857d 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/rues/mod.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/rues/mod.js @@ -8,6 +8,7 @@ import { CallableProxy } from "./callable.js"; import { ListenerProxy } from "./listener.js"; import { RuesEvent } from "./event.js"; +import { RuesScope } from "./scope.js"; const _rues = Symbol("rues"); @@ -64,12 +65,15 @@ class RuesTarget { export class Rues extends EventTarget { #url; #socket; + #scopes; #session; #version = "0.8.0"; constructor(url, options = {}) { super(); + this.#scopes = new Map(); + if (typeof url === "string") { this.#url = new URL(url); } else if (!(url instanceof URL)) { @@ -155,7 +159,16 @@ export class Rues extends EventTarget { return this.#socket?.readyState === WebSocket.OPEN; } - scope(name, options = {}) { + scope(source, options = {}) { + let name; + + if (typeof source === "string") { + name = source; + } else if (source instanceof RuesScope) { + ({ name } = source); + this.#scopes.set(name, source); + } + const target = new RuesTarget(name, options); target[_rues] = this; @@ -165,6 +178,13 @@ export class Rues extends EventTarget { handleEvent(event) { if (event instanceof MessageEvent) { let ruesEvent = RuesEvent.from(event); + + const scope = this.#scopes.get(ruesEvent.origin.scope); + + if (scope) { + ruesEvent = scope.eventFrom(ruesEvent); + } + let ruesComponentEvent = RuesEvent.from(ruesEvent, { as: "component" }); this.dispatchEvent(ruesEvent); diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/rues/scope.js b/web-wallet/src/lib/vendor/w3sper.js/src/rues/scope.js new file mode 100644 index 0000000000..18c8e59b74 --- /dev/null +++ b/web-wallet/src/lib/vendor/w3sper.js/src/rues/scope.js @@ -0,0 +1,16 @@ +// @ts-nocheck +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// +// Copyright (c) DUSK NETWORK. All rights reserved. + +export class RuesScope { + constructor(name) { + this.name = name; + } + + eventFrom(ruesEvent) { + return ruesEvent; + } +} diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js b/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js index ea8ab956bc..d75bc7ffe1 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js @@ -9,10 +9,10 @@ export const TRANSFER = "0100000000000000000000000000000000000000000000000000000000000000"; import { AddressSyncer } from "./network/syncer/address.js"; -import { Gas } from "./network/gas.js"; import * as ProtocolDriver from "./protocol-driver/mod.js"; import { ProfileGenerator, Profile } from "./profile.js"; -import * as base58 from "./b58.js"; +import * as base58 from "./encoders/b58.js"; +import { Gas } from "./gas.js"; const _attributes = Symbol("builder::attributes"); @@ -86,10 +86,15 @@ class AccountTransfer extends Transfer { return this; } + memo(value) { + this[_attributes].memo = value; + return this; + } + async build(network) { const sender = this.bookentry.profile; const { attributes } = this; - const { to, amount: transfer_value, gas } = attributes; + const { to, amount: transfer_value, memo: data, gas } = attributes; const receiver = base58.decode(to); @@ -122,7 +127,7 @@ class AccountTransfer extends Transfer { gas_price: gas.price, nonce, chainId, - data: null, + data, }); return Object.freeze({ diff --git a/web-wallet/src/lib/vendor/wallet_core.wasm b/web-wallet/src/lib/vendor/wallet_core.wasm index 0d1fbd1c449c49c31f868be3a720f41693f29ee5..e98a5cfe2ca0e0823e65115dae264d8dbe5f2eed 100755 GIT binary patch delta 52761 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

!oo}voZ>B~7?ctffxl<r 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