Skip to content

Commit da3b71d

Browse files
authored
Merge pull request #3763 from dusk-network/wallet-core-wasm-upgrade
Wallet core wasm upgrade
2 parents cd2edef + 775715f commit da3b71d

File tree

5 files changed

+77
-14
lines changed

5 files changed

+77
-14
lines changed
-300 KB
Binary file not shown.
305 KB
Binary file not shown.

rusk/src/lib/http.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ where
597597

598598
#[cfg(feature = "http-wasm")]
599599
if path == "/static/drivers/wallet-core.wasm" {
600-
let wallet_wasm = include_bytes!("../assets/wallet_core-1.0.0.wasm");
600+
let wallet_wasm = include_bytes!("../assets/wallet_core-1.0.1.wasm");
601601
let mut response =
602602
Response::new(Full::from(wallet_wasm.to_vec()).into());
603603
response.headers_mut().append(

w3sper.js/tests/transfer_test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,8 @@ test("shield", async () => {
250250
await network.disconnect();
251251
});
252252

253-
test("account memo transfer", async () => {
253+
// note: ignored until PR 3743 is approved
254+
_ignore_test_1("account memo transfer", async () => {
254255
const network = await Network.connect("http://localhost:8080/");
255256
const profiles = new ProfileGenerator(seeder);
256257
const users = await Promise.all([profiles.default, profiles.next()]);
@@ -305,7 +306,8 @@ test("account memo transfer", async () => {
305306
await network.disconnect();
306307
});
307308

308-
test("address memo transfer", async () => {
309+
// note: ignored until PR 3743 is approved
310+
_ignore_test_2("address memo transfer", async () => {
309311
const { cleanup } = useAsProtocolDriver(await getLocalWasmBuffer()); // Temporarily needed, while the node doesn't serve the latest WASM.
310312
const network = await Network.connect("http://localhost:8080/");
311313
const profiles = new ProfileGenerator(seeder);

wallet-core/src/ffi.rs

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ use alloc::string::String;
2424
use alloc::vec::Vec;
2525
use core::{ptr, slice};
2626

27+
use crate::keys::{
28+
derive_bls_pk, derive_bls_sk, derive_phoenix_pk, derive_phoenix_sk,
29+
derive_phoenix_vk,
30+
};
31+
use crate::notes::{self, balance, owned, pick};
32+
use crate::Seed;
2733
use dusk_bytes::{DeserializableSlice, Serializable};
34+
use dusk_core::abi::ContractId;
2835
use dusk_core::signatures::bls::PublicKey as BlsPublicKey;
2936
use dusk_core::stake::{Stake, STAKE_CONTRACT};
3037
use dusk_core::transfer::data::{ContractCall, TransactionData};
@@ -41,13 +48,6 @@ use rand_chacha::ChaCha12Rng;
4148
use rkyv::to_bytes;
4249
use zeroize::Zeroize;
4350

44-
use crate::keys::{
45-
derive_bls_pk, derive_bls_sk, derive_phoenix_pk, derive_phoenix_sk,
46-
derive_phoenix_vk,
47-
};
48-
use crate::notes::{self, balance, owned, pick};
49-
use crate::Seed;
50-
5151
use error::ErrorCode;
5252

5353
#[no_mangle]
@@ -388,8 +388,10 @@ pub unsafe fn phoenix(
388388
None
389389
} else {
390390
let buffer = mem::read_buffer(data);
391-
392-
Some(buffer[1..].to_vec().into())
391+
let transaction_data: TransactionData =
392+
rkyv::from_bytes(buffer.to_vec().as_slice())
393+
.or(Err(ErrorCode::DeserializationError))?;
394+
Some(transaction_data)
393395
};
394396

395397
let prover = NoOpProver::default();
@@ -467,8 +469,10 @@ pub unsafe fn moonlight(
467469
None
468470
} else {
469471
let buffer = mem::read_buffer(data);
470-
471-
Some(buffer[1..].to_vec().into())
472+
let transaction_data: TransactionData =
473+
rkyv::from_bytes(buffer.to_vec().as_slice())
474+
.or(Err(ErrorCode::DeserializationError))?;
475+
Some(transaction_data)
472476
};
473477

474478
let tx = MoonlightTransaction::new(
@@ -818,3 +822,60 @@ pub unsafe fn moonlight_stake_reward(
818822

819823
ErrorCode::Ok
820824
}
825+
826+
#[no_mangle]
827+
pub unsafe fn create_tx_data(
828+
fn_name_len: *const u32,
829+
fn_name_buf: *mut u8,
830+
fn_args_len: *const u32,
831+
fn_args_buf: *mut u8,
832+
contract_id: [u8; 32],
833+
memo_len: *const u32,
834+
memo_buf: *mut u8,
835+
rkyv_ptr: *mut *mut u8,
836+
) -> ErrorCode {
837+
let tx_data = if memo_len == crate::ffi::ptr::null()
838+
|| memo_buf == crate::ffi::ptr::null_mut()
839+
{
840+
let fn_name = alloc::string::String::from_raw_parts(
841+
fn_name_buf,
842+
*fn_name_len as usize,
843+
*fn_name_len as usize,
844+
);
845+
let fn_args = alloc::vec::Vec::from_raw_parts(
846+
fn_args_buf,
847+
*fn_args_len as usize,
848+
*fn_args_len as usize,
849+
);
850+
let contract = ContractId::from_bytes(contract_id);
851+
852+
let contract_call = ContractCall {
853+
fn_name,
854+
fn_args,
855+
contract,
856+
};
857+
TransactionData::Call(contract_call)
858+
} else {
859+
let memo = alloc::vec::Vec::from_raw_parts(
860+
memo_buf,
861+
*memo_len as usize,
862+
*memo_len as usize,
863+
);
864+
TransactionData::Memo(memo)
865+
};
866+
let bytes = match rkyv::to_bytes::<_, 4096>(&tx_data) {
867+
Ok(v) => v.to_vec(),
868+
Err(_) => return ErrorCode::ArchivingError,
869+
};
870+
let len = bytes.len().to_le_bytes();
871+
872+
let ptr = mem::malloc(4 + bytes.len() as u32);
873+
let ptr = ptr as *mut u8;
874+
875+
*rkyv_ptr = ptr;
876+
877+
ptr::copy_nonoverlapping(len.as_ptr(), ptr, 4);
878+
ptr::copy_nonoverlapping(bytes.as_ptr(), ptr.add(4), bytes.len());
879+
880+
ErrorCode::Ok
881+
}

0 commit comments

Comments
 (0)