diff --git a/packages/backend/bindings/node/native/Cargo.lock b/packages/backend/bindings/node/native/Cargo.lock index 3c111bbfa94..e9d4a90c188 100644 --- a/packages/backend/bindings/node/native/Cargo.lock +++ b/packages/backend/bindings/node/native/Cargo.lock @@ -187,9 +187,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.47" +version = "0.1.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e098e9c493fdf92832223594d9a164f96bdf17ba81a42aff86f85c76768726a" +checksum = "36ea56748e10732c49404c153638a15ec3d6211ec5ff35d9bb20e13b93576adf" dependencies = [ "proc-macro2", "quote", @@ -329,7 +329,7 @@ dependencies = [ "flume", "futures 0.3.13", "hex", - "iota-crypto 0.3.0", + "iota-crypto 0.3.0 (git+https://github.com/iotaledger/crypto.rs?rev=c3bf565eba62d0b81144174c2ff917bfde282e49)", "log", "serde 1.0.124", "thiserror", @@ -347,7 +347,7 @@ dependencies = [ "bee-pow", "digest 0.9.0", "hex", - "iota-crypto 0.3.0", + "iota-crypto 0.3.0 (git+https://github.com/iotaledger/crypto.rs?rev=c3bf565eba62d0b81144174c2ff917bfde282e49)", "ref-cast", "serde 1.0.124", "thiserror", @@ -379,7 +379,7 @@ source = "git+https://github.com/iotaledger/bee.git?rev=acab07e4bcff947c70cde312 dependencies = [ "bee-crypto 0.2.0-alpha (git+https://github.com/iotaledger/bee.git?branch=dev)", "bee-ternary 0.4.0-alpha (git+https://github.com/iotaledger/bee.git?branch=dev)", - "iota-crypto 0.3.0", + "iota-crypto 0.3.0 (git+https://github.com/iotaledger/crypto.rs?rev=c3bf565eba62d0b81144174c2ff917bfde282e49)", "thiserror", ] @@ -405,7 +405,7 @@ dependencies = [ "futures-util", "fxhash", "hex", - "iota-crypto 0.3.0", + "iota-crypto 0.3.0 (git+https://github.com/iotaledger/crypto.rs?rev=c3bf565eba62d0b81144174c2ff917bfde282e49)", "log", "num_cpus", "pin-project 1.0.5", @@ -438,7 +438,7 @@ dependencies = [ "digest 0.9.0", "futures 0.3.13", "hex", - "iota-crypto 0.3.0", + "iota-crypto 0.3.0 (git+https://github.com/iotaledger/crypto.rs?rev=c3bf565eba62d0b81144174c2ff917bfde282e49)", "log", "num_cpus", "serde 1.0.124", @@ -1773,7 +1773,7 @@ dependencies = [ [[package]] name = "iota-client" version = "0.5.0-alpha.3" -source = "git+https://github.com/iotaledger/iota.rs?rev=be869fc47117f996cf040c8466ba4023d70cacfa#be869fc47117f996cf040c8466ba4023d70cacfa" +source = "git+https://github.com/iotaledger/iota.rs?rev=15dbf1f928b34a1caf3eba6d575468e4981d0a26#15dbf1f928b34a1caf3eba6d575468e4981d0a26" dependencies = [ "async-trait", "bee-common 0.3.1-alpha (git+https://github.com/iotaledger/bee.git?branch=dev)", @@ -1800,7 +1800,7 @@ dependencies = [ [[package]] name = "iota-client" version = "0.5.0-alpha.3" -source = "git+https://github.com/iotaledger/iota.rs?branch=dev#be869fc47117f996cf040c8466ba4023d70cacfa" +source = "git+https://github.com/iotaledger/iota.rs?branch=dev#15dbf1f928b34a1caf3eba6d575468e4981d0a26" dependencies = [ "async-trait", "bee-common 0.3.1-alpha (git+https://github.com/iotaledger/bee.git?branch=dev)", @@ -1823,18 +1823,18 @@ dependencies = [ [[package]] name = "iota-core" version = "0.2.0-alpha.3" -source = "git+https://github.com/iotaledger/iota.rs?rev=be869fc47117f996cf040c8466ba4023d70cacfa#be869fc47117f996cf040c8466ba4023d70cacfa" +source = "git+https://github.com/iotaledger/iota.rs?rev=15dbf1f928b34a1caf3eba6d575468e4981d0a26#15dbf1f928b34a1caf3eba6d575468e4981d0a26" dependencies = [ "bee-common 0.3.1-alpha (git+https://github.com/iotaledger/bee.git?rev=c42171ff33c80cc2efb183e244dc79b7f58d9ac4)", "bee-message", "bee-pow", - "iota-client 0.5.0-alpha.3 (git+https://github.com/iotaledger/iota.rs?rev=be869fc47117f996cf040c8466ba4023d70cacfa)", + "iota-client 0.5.0-alpha.3 (git+https://github.com/iotaledger/iota.rs?rev=15dbf1f928b34a1caf3eba6d575468e4981d0a26)", ] [[package]] name = "iota-core" version = "0.2.0-alpha.3" -source = "git+https://github.com/iotaledger/iota.rs?branch=dev#be869fc47117f996cf040c8466ba4023d70cacfa" +source = "git+https://github.com/iotaledger/iota.rs?branch=dev#15dbf1f928b34a1caf3eba6d575468e4981d0a26" dependencies = [ "bee-common 0.3.1-alpha (git+https://github.com/iotaledger/bee.git?rev=c42171ff33c80cc2efb183e244dc79b7f58d9ac4)", "bee-message", @@ -1878,9 +1878,18 @@ version = "0.3.0" source = "git+https://github.com/iotaledger/crypto.rs?rev=c3bf565eba62d0b81144174c2ff917bfde282e49#c3bf565eba62d0b81144174c2ff917bfde282e49" dependencies = [ "blake2", - "chacha20poly1305 0.7.1", "digest 0.9.0", "ed25519-zebra", +] + +[[package]] +name = "iota-crypto" +version = "0.3.0" +source = "git+https://github.com/iotaledger/crypto.rs?rev=fa67e9da78799186fbc8c7892d862221bd5d3171#fa67e9da78799186fbc8c7892d862221bd5d3171" +dependencies = [ + "blake2", + "chacha20poly1305 0.7.1", + "digest 0.9.0", "getrandom 0.2.2", "hmac 0.10.1", "pbkdf2", @@ -1910,7 +1919,7 @@ dependencies = [ [[package]] name = "iota-wallet" version = "0.1.0" -source = "git+https://github.com/iotaledger/wallet.rs?branch=develop#544384863771c166278beceb82f70e4ea4f67a3d" +source = "git+https://github.com/iotaledger/wallet.rs?branch=develop#f1dbd05b4347ed649cf76458e21d6c8bf1cf68c4" dependencies = [ "async-trait", "backtrace", @@ -1920,12 +1929,12 @@ dependencies = [ "futures 0.3.13", "getset", "hex", - "iota-core 0.2.0-alpha.3 (git+https://github.com/iotaledger/iota.rs?rev=be869fc47117f996cf040c8466ba4023d70cacfa)", - "iota-crypto 0.3.0", + "iota-core 0.2.0-alpha.3 (git+https://github.com/iotaledger/iota.rs?rev=15dbf1f928b34a1caf3eba6d575468e4981d0a26)", + "iota-crypto 0.3.0 (git+https://github.com/iotaledger/crypto.rs?rev=fa67e9da78799186fbc8c7892d862221bd5d3171)", "iota-stronghold", "log", "once_cell", - "rand 0.7.3", + "rand 0.8.3", "riker", "rusqlite", "serde 1.0.124", @@ -3162,9 +3171,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0460542b551950620a3648c6aa23318ac6b3cd779114bd873209e6e8b5eb1c34" +checksum = "bf12057f289428dbf5c591c74bf10392e4a8003f993405a902f20117019022d4" dependencies = [ "base64", "bytes", @@ -3727,9 +3736,9 @@ checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" [[package]] name = "syn" -version = "1.0.62" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "123a78a3596b24fee53a6464ce52d8ecbf62241e6294c7e7fe12086cd161f512" +checksum = "8fd9bc7ccc2688b3344c2f48b9b546648b25ce0b20fc717ee7fa7981a8ca9717" dependencies = [ "proc-macro2", "quote", @@ -3845,9 +3854,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8190d04c665ea9e6b6a0dc45523ade572c088d2e6566244c1122671dbf4ae3a" +checksum = "8d56477f6ed99e10225f38f9f75f872f29b8b8bd8c0b946f63345bb144e9eeda" dependencies = [ "autocfg", "bytes", @@ -3897,9 +3906,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1981ad97df782ab506a1f43bf82c967326960d278acf3bf8279809648c3ff3ea" +checksum = "c535f53c0cfa1acace62995a8994fc9cc1f12d202420da96ff306ee24d576469" dependencies = [ "futures-core", "pin-project-lite", @@ -3921,9 +3930,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb7cb2f00c5ae8df755b252306272cd1790d39728363936e01827e11f0b017b" +checksum = "ec31e5cc6b46e653cf57762f36f71d5e6386391d88a72fd6db4508f8f676fb29" dependencies = [ "bytes", "futures-core", diff --git a/packages/shared/components/ActivityDetail.svelte b/packages/shared/components/ActivityDetail.svelte index 78f47ee5ce8..90b0edf177c 100644 --- a/packages/shared/components/ActivityDetail.svelte +++ b/packages/shared/components/ActivityDetail.svelte @@ -6,14 +6,15 @@ import { getContext } from 'svelte' import { date } from 'svelte-i18n' import type { Readable, Writable } from 'svelte/store' + import type { Payload } from 'shared/lib/typings/message' export let id - export let incoming - export let internal - export let value - export let payload + export let timestamp export let locale + + export let payload: Payload + export let onBackClick = () => {} const accounts = getContext>('walletAccounts') @@ -30,15 +31,15 @@ ?.filter((output) => output?.data?.remainder === false) ?.map((output) => output?.data?.address) ?? [] - $: senderAccount = !incoming + $: senderAccount = !payload.data.essence.data.incoming ? $activeAccount - : internal + : payload.data.essence.data.internal ? $accounts.find((acc) => acc.addresses.some((add) => senderAddress === add.address)) : null - $: receiverAccount = incoming + $: receiverAccount = payload.data.essence.data.incoming ? $activeAccount - : internal + : payload.data.essence.data.internal ? $accounts.find((acc) => acc.addresses.some((add) => receiverAddresses.includes(add.address))) : null @@ -52,7 +53,7 @@ class="flex items-center justify-center w-8 h-8 rounded-xl p-2 mb-2 text-12 leading-100 font-bold text-center bg-{senderAccount?.color ?? 'blue'}-500 text-white"> {getInitials(senderAccount.alias, 2)} - {#if !incoming} + {#if !payload.data.essence.data.incoming} {locale('general.you')} {/if} {:else} @@ -60,7 +61,7 @@ {/if} - {formatUnit(value)} + {formatUnit(payload.data.essence.data.value)}
{#if receiverAccount} @@ -68,11 +69,11 @@ class="flex items-center justify-center w-8 h-8 rounded-xl p-2 mb-2 text-12 leading-100 font-bold bg-{receiverAccount?.color ?? 'blue'}-500 text-white"> {getInitials(receiverAccount.alias, 2)}
- {#if incoming} + {#if payload.data.essence.data.incoming} {locale('general.you')} {/if} {/if} - {#if !incoming} + {#if !payload.data.essence.data.incoming} {#each receiverAddresses as address} {truncateString(address, 3, 3, 3)} {/each} diff --git a/packages/shared/components/ActivityRow.svelte b/packages/shared/components/ActivityRow.svelte index bcdcbcbc960..dc5fbd1bb66 100644 --- a/packages/shared/components/ActivityRow.svelte +++ b/packages/shared/components/ActivityRow.svelte @@ -3,15 +3,16 @@ import { truncateString } from 'shared/lib/helpers' import { formatUnit } from 'shared/lib/units' import { date } from 'svelte-i18n' + import type { Payload } from 'shared/lib/typings/message' export let id export let timestamp - export let value - export let incoming - export let internal export let confirmed export let color - export let onClick = () => {} + + export let payload: Payload + +export let onClick = () => {} diff --git a/packages/shared/lib/chart.ts b/packages/shared/lib/chart.ts index 1b171ffd176..4759f743a95 100644 --- a/packages/shared/lib/chart.ts +++ b/packages/shared/lib/chart.ts @@ -127,8 +127,8 @@ export const getAccountActivityData = (account: WalletAccount) => { const message = messages[index] const messageTimestamp = new Date(message.timestamp).getTime() if (messageTimestamp >= start && messageTimestamp <= end) { - const valueMiota = convertUnits(message.value, Unit.i, Unit.Mi) - if (message.incoming) { + const valueMiota = convertUnits(message.payload.data.essence.data.value, Unit.i, Unit.Mi) + if (message.payload.data.essence.data.incoming) { _incoming += valueMiota } else { diff --git a/packages/shared/lib/typings/message.ts b/packages/shared/lib/typings/message.ts index 599017a84c6..3693a9de047 100644 --- a/packages/shared/lib/typings/message.ts +++ b/packages/shared/lib/typings/message.ts @@ -1,96 +1,103 @@ import type { Bridge, CommunicationIds } from './bridge' import type { AccountIdentifier } from './account' -type MessageVersion = 1 +type MessageVersion = 1; -export interface UTXOInput { - type: 'UTXO' - data: { - input: string; - metadata?: { - address: string; - amount: number; - index: number; - isSpent: boolean; - kind: 'SignatureLockedSingle' | 'SignatureLockedDustAllowance'; - messageId: string; - transactionId: string; - } - } +export enum MessageType { + /// Message received. + Received = 1, + /// Message sent. + Sent = 2, + /// Message not broadcasted. + Failed = 3, + /// Message not confirmed. + Unconfirmed = 4, + /// A value message. + Value = 5, } -export type Input = UTXOInput +export interface RegularEssence { + inputs: Input[]; + outputs: Output[]; + payload?: { + type: 'Indexation', + data: any; + }; + incoming: boolean; + internal: boolean; + value: number; + remainderValue: number; +} -export interface SignatureLockedSingle { - type: 'SignatureLockedSingle' - data: { - address: string - amount: number - remainder: boolean - } +export type Essence = { + type: 'Regular', + data: RegularEssence } -export interface SignatureLockedDustAllowance { - type: 'SignatureLockedDustAllowance' - data: { - address: string +export interface UTXOInput { + input: string + metadata?: { + transactionId: string + messageId: string + index: number amount: number - remainder: boolean + isSpent: boolean + address: string + kind: 'SignatureLockedSingle' } } -export type Output = SignatureLockedSingle | SignatureLockedDustAllowance +export type Input = { type: 'UTXO', data: UTXOInput } -export interface TransactionEssence { - inputs: Input[] - outputs: Output[] - // TODO: Add proper type for essence payload - payload?: any +export interface SignatureLockedSingleOutput { + address: string + amount: number + remainder: boolean +} + +export interface SignatureLockedDustAllowance { + address: string + amount: number + remainder: boolean +} + +export type Output = { + type: 'SignatureLockedSingle', + data: SignatureLockedSingleOutput +} | { + type: 'SignatureLockedDustAllowance', + data: SignatureLockedDustAllowance } -export interface MessagePayload { - type: 'Transaction' +export interface Transaction { + type: 'Transaction', data: { - essence: { - data: TransactionEssence - } + essence: Essence; unlock_blocks: { - type: 'Signature' + type: 'Signature'; data: { - type: 'Ed25519' + type: 'Ed25519'; data: { - public_key: number[] + public_key: number[]; signature: number[] } } - } + }[] } } -export interface Message { - broadcasted: boolean - id: string - incoming: boolean - nonce: number - parents: string[] - remainderValue: number - timestamp: string - value: number - version: MessageVersion - payload: MessagePayload -} +export type Payload = Transaction; -export enum MessageType { - /// Message received. - Received, - /// Message sent. - Sent, - /// Message not broadcasted. - Failed, - /// Message not confirmed. - Unconfirmed, - /// A value message. - Value, +export interface Message { + id: string; + version: MessageVersion; + parents: string[]; + payloadLength: number; + payload: Payload; + timestamp: string; + nonce: number; + confirmed?: boolean; + broadcasted: boolean; } export interface ListMessageFilter { diff --git a/packages/shared/lib/validator.ts b/packages/shared/lib/validator.ts index 939c4efd266..4ed0513c451 100644 --- a/packages/shared/lib/validator.ts +++ b/packages/shared/lib/validator.ts @@ -391,7 +391,7 @@ class MessageValidator extends Validator { type: ErrorTypes.InvalidType, error: 'Invalid type of broadcasted received.', }) - } else if ('boolean' !== typeof payload.incoming) { + } else if ('boolean' !== typeof payload.payload.data.essence.data.incoming) { return super.createResponse(false, { type: ErrorTypes.InvalidType, error: 'Invalid type of incoming received.', @@ -401,7 +401,7 @@ class MessageValidator extends Validator { type: ErrorTypes.InvalidType, error: 'Invalid type of nonce received.', }) - } else if ('number' !== typeof payload.remainderValue) { + } else if ('number' !== typeof payload.payload.data.essence.data.remainderValue) { return super.createResponse(false, { type: ErrorTypes.InvalidType, error: 'Invalid type of remainderValue received.', diff --git a/packages/shared/lib/wallet.ts b/packages/shared/lib/wallet.ts index edd3f411811..fca44436422 100644 --- a/packages/shared/lib/wallet.ts +++ b/packages/shared/lib/wallet.ts @@ -198,7 +198,7 @@ export const initialiseListeners = () => { const locale = get(_) as (string) => string const notificationMessage = locale('notifications.valueTx') - .replace('{{value}}', formatUnit(message.value)) + .replace('{{value}}', formatUnit(message.payload.data.essence.data.value)) .replace('{{account}}', account.alias) showSystemNotification({ type: "info", message: notificationMessage }) @@ -222,7 +222,7 @@ export const initialiseListeners = () => { const locale = get(_) as (string) => string const notificationMessage = locale(`notifications.${messageKey}`) - .replace('{{value}}', formatUnit(message.value)) + .replace('{{value}}', formatUnit(message.payload.data.essence.data.value)) .replace('{{account}}', account.alias) showSystemNotification({ type: "info", message: notificationMessage }) @@ -370,23 +370,6 @@ export const getLatestMessages = (accounts: WalletAccount[], count = 10): Accoun }); return Object.values(messages) - .map( - (message) => { - const outputs = message.payload.data.essence.data.outputs; - const inputs = message.payload.data.essence.data.inputs - - return Object.assign( - {}, - message, - { - internal: outputs.length && outputs.every( - (output: Output) => addresses.includes(output.data.address) - ) && inputs.length && inputs.every( - (input: Input) => input.data.metadata ? addresses.includes(input.data.metadata.address) : false - ) - }) - } - ) .sort((a, b) => { return new Date(b.timestamp) - new Date(a.timestamp) }) @@ -500,11 +483,14 @@ export const getAccountsBalanceHistory = (accounts: Account[], priceData: PriceD var balanceSoFar = 0; let accountBalanceVariations = [{ balance: balanceSoFar, timestamp: '0' }] messages.forEach((message) => { - if (message.incoming) { - balanceSoFar += message.value; + const essence = message.payload.data.essence.data; + + if (essence.incoming) { + balanceSoFar += essence.value; } else { - balanceSoFar -= message.value; + balanceSoFar -= essence.value; } + accountBalanceVariations.push({ balance: balanceSoFar, timestamp: message.timestamp }) }) // Calculate the balance in each market data timestamp