From 04ec695149d308f34892c6e3e91c5480e1e844b0 Mon Sep 17 00:00:00 2001 From: Jay Geng Date: Wed, 6 Sep 2023 15:47:04 -0400 Subject: [PATCH] wip: fix rent charge and add test contract --- soroban-env-host/src/e2e_invoke.rs | 3 +- soroban-env-host/src/test/invocation.rs | 44 ++++++++++++++++-- .../wasm-workspace/contract_data/src/lib.rs | 31 ++++++++++-- .../opt/auth_test_contract.wasm | Bin 5707 -> 5708 bytes .../wasm-workspace/opt/example_add_f32.wasm | Bin 1062 -> 1062 bytes .../wasm-workspace/opt/example_add_i32.wasm | Bin 1009 -> 1009 bytes .../wasm-workspace/opt/example_alloc.wasm | Bin 2433 -> 2432 bytes .../wasm-workspace/opt/example_complex.wasm | Bin 1799 -> 1799 bytes .../opt/example_contract_data.wasm | Bin 4153 -> 3913 bytes .../opt/example_create_contract.wasm | Bin 708 -> 708 bytes .../wasm-workspace/opt/example_err.wasm | Bin 1051 -> 1051 bytes .../wasm-workspace/opt/example_fannkuch.wasm | Bin 1040 -> 1040 bytes .../wasm-workspace/opt/example_fib.wasm | Bin 356 -> 356 bytes .../wasm-workspace/opt/example_hostile.wasm | Bin 2111 -> 2115 bytes .../opt/example_invoke_contract.wasm | Bin 1952 -> 1952 bytes .../opt/example_linear_memory.wasm | Bin 869 -> 869 bytes .../opt/example_simple_account.wasm | Bin 1986 -> 1986 bytes .../opt/example_updateable_contract.wasm | Bin 597 -> 597 bytes .../wasm-workspace/opt/example_vec.wasm | Bin 592 -> 592 bytes .../soroban_write_upgrade_bytes_contract.wasm | Bin 663 -> 663 bytes .../opt/test_delegated_account.wasm | Bin 1979 -> 1979 bytes 21 files changed, 68 insertions(+), 10 deletions(-) diff --git a/soroban-env-host/src/e2e_invoke.rs b/soroban-env-host/src/e2e_invoke.rs index 1faaea183..c5ef2c83b 100644 --- a/soroban-env-host/src/e2e_invoke.rs +++ b/soroban-env-host/src/e2e_invoke.rs @@ -179,9 +179,10 @@ pub fn extract_rent_changes(ledger_changes: &Vec) -> Vec= expiration_change.new_expiration_ledger + && entry_change.old_entry_size_bytes >= encoded_new_value.len() as u32 { return None; } diff --git a/soroban-env-host/src/test/invocation.rs b/soroban-env-host/src/test/invocation.rs index 448ec2215..1dcaccb4e 100644 --- a/soroban-env-host/src/test/invocation.rs +++ b/soroban-env-host/src/test/invocation.rs @@ -2,14 +2,18 @@ use std::rc::Rc; use expect_test::expect; use soroban_env_common::{ - xdr::{self, ScErrorCode}, - Env, EnvBase, TryFromVal, Val, + xdr::{ + self, ContractDataDurability, LedgerKey, LedgerKeyContractData, ScErrorCode, ScSymbol, + ScVal, + }, + Env, EnvBase, TryFromVal, U64Small, Val, }; use crate::{ - events::HostEvent, xdr::ScErrorType, ContractFunctionSet, Error, Host, HostError, Symbol, Tag, + budget::AsBudget, events::HostEvent, xdr::ScErrorType, ContractFunctionSet, Error, Host, + HostError, Symbol, Tag, }; -use soroban_test_wasms::{ADD_I32, ALLOC, ERR, INVOKE_CONTRACT, VEC}; +use soroban_test_wasms::{ADD_I32, ALLOC, CONTRACT_STORAGE, ERR, INVOKE_CONTRACT, VEC}; #[test] fn invoke_single_contract_function() -> Result<(), HostError> { @@ -273,3 +277,35 @@ fn wasm_invoke_return_err_variants() -> Result<(), HostError> { } Ok(()) } + +#[test] +fn invoke_single_contract_function2() -> Result<(), HostError> { + let host = Host::test_host_with_recording_footprint(); + let contract_id_obj = host.register_test_contract_wasm(CONTRACT_STORAGE); + // put_persistent + let func = host.symbol_new_from_slice("put_persistent")?; + let key = Symbol::try_from_small_str("a")?; + let mut args = host.vec_new()?; + args = host.vec_push_back(args, key.into())?; + args = host.vec_push_back(args, U64Small::try_from(1u64).unwrap().into())?; + let _res = host.call(contract_id_obj, func.into(), args)?; + + // increase_entry_size + let func = host.symbol_new_from_slice("increase_entry_size")?; + let mut args = host.vec_new()?; + args = host.vec_push_back(args, key.into())?; + let _res = host.call(contract_id_obj, func.into(), args)?; + + // let v = host.get_contract_data(key.into(), soroban_env_common::StorageType::Persistent)?; + // println!("{:?}", v); + + let k = Rc::new(LedgerKey::ContractData(LedgerKeyContractData { + key: ScVal::Symbol(ScSymbol::try_from("a").unwrap()), + durability: ContractDataDurability::Persistent, + contract: xdr::ScAddress::Contract(host.contract_id_from_address(contract_id_obj)?), + })); + let v = host.with_mut_storage(|s| s.get(&k, host.as_budget()))?; + println!("{:?}", v); + + Ok(()) +} diff --git a/soroban-test-wasms/wasm-workspace/contract_data/src/lib.rs b/soroban-test-wasms/wasm-workspace/contract_data/src/lib.rs index f59decaa8..6d7b650dd 100644 --- a/soroban-test-wasms/wasm-workspace/contract_data/src/lib.rs +++ b/soroban-test-wasms/wasm-workspace/contract_data/src/lib.rs @@ -22,8 +22,15 @@ impl Contract { e.storage().persistent().get(&key).unwrap() } - pub fn bump_persistent(e: Env, key: Symbol, low_expiration_watermark: u32, high_expiration_watermark: u32) { - e.storage().persistent().bump(&key, low_expiration_watermark, high_expiration_watermark) + pub fn bump_persistent( + e: Env, + key: Symbol, + low_expiration_watermark: u32, + high_expiration_watermark: u32, + ) { + e.storage() + .persistent() + .bump(&key, low_expiration_watermark, high_expiration_watermark) } pub fn put_temporary(e: Env, key: Symbol, val: u64) { @@ -42,8 +49,15 @@ impl Contract { e.storage().temporary().get(&key).unwrap() } - pub fn bump_temporary(e: Env, key: Symbol, low_expiration_watermark: u32, high_expiration_watermark: u32) { - e.storage().temporary().bump(&key, low_expiration_watermark, high_expiration_watermark) + pub fn bump_temporary( + e: Env, + key: Symbol, + low_expiration_watermark: u32, + high_expiration_watermark: u32, + ) { + e.storage() + .temporary() + .bump(&key, low_expiration_watermark, high_expiration_watermark) } pub fn put_instance(e: Env, key: Symbol, val: u64) { @@ -63,6 +77,13 @@ impl Contract { } pub fn bump_instance(e: Env, low_expiration_watermark: u32, high_expiration_watermark: u32) { - e.storage().instance().bump(low_expiration_watermark, high_expiration_watermark) + e.storage() + .instance() + .bump(low_expiration_watermark, high_expiration_watermark) + } + + pub fn increase_entry_size(e: Env, key: Symbol) { + let u: u64 = e.storage().persistent().get(&key).unwrap(); + e.storage().persistent().set(&key, &u128::from(u)) } } diff --git a/soroban-test-wasms/wasm-workspace/opt/auth_test_contract.wasm b/soroban-test-wasms/wasm-workspace/opt/auth_test_contract.wasm index 84ebca5f9b2c6f78f4bc1a4c23346e2b0278fb2d..fa084050b239f0b25f850807643a71b824c21c31 100644 GIT binary patch delta 334 zcmWNKJxjx26h`mO%~#Xf#zLhupl{+J(GIbuO^bugpyGdUN!oPipo?M%S$WSpBL zALLK*gU|E#{I2l8r;GLESU*BuEC%T#CWGQFtw)jTMsCdsTVc?R!p%k}2%DZ0b!+u7 P>TR{Wj#F>;8ZN*;Iw?%B delta 328 zcmWNJJxjw-7=`b9-`pf^Y8qN`Xi#tKpe+U4v`q~THjARa!6mWH5J4P7L9xYMq2W$~ z;v^0Z4%u{a_G5H&5k(wCap-K8!^3$v=dt=w9a<6&`u%9W8u=Aaqm!kH6q5lMA%s#$ z18A8s&=na03(1xyo-r2#gSw}L7YpgNq$NnN%O>}qzeElepp#d$}?${IvhCK zRE^ihw4< z6l1o?xRj_O!45~x#9ZpxlwGpo!VZ^RST=P8f<)sqnRYf~J$*>wJ3h|*0wz~tUq66% zG1BkQH9~Qdy^k-AEfCvAOXPDN0;lm_?iwqOXZd!w*0L8GPSbLNjlionYF0CFy0+hF N_S$vJ>jjQa$UpT`OSS+2 diff --git a/soroban-test-wasms/wasm-workspace/opt/example_add_f32.wasm b/soroban-test-wasms/wasm-workspace/opt/example_add_f32.wasm index 6a8c47b1434b44c761305c8de8d98dc7fcbe1fca..4dd82484f5f43cd0b737d351f0d064e00695ad8d 100644 GIT binary patch delta 50 zcmZ3+v5aHGA7-u8R1=d_6C;Bp%cR7V)FeZ*? delta 50 zcmZ3+v5aHGA7(AfM583L6a!N;3u8+YBg?epv_wN=10$0(%M`ODW0O>KL!-phG|MCg F1^|Wp4lV!y diff --git a/soroban-test-wasms/wasm-workspace/opt/example_add_i32.wasm b/soroban-test-wasms/wasm-workspace/opt/example_add_i32.wasm index 0859a11eb7e12193888aa9109395d6c354133b70..da7f7e1fb148479eec102d3a3dfad4d83ec82dda 100644 GIT binary patch delta 50 zcmey!{*isdab~U5R1=d_6C;Bp%cR7V)FeZ*KL!-phG|MCg F1^}4>4vhc+ diff --git a/soroban-test-wasms/wasm-workspace/opt/example_alloc.wasm b/soroban-test-wasms/wasm-workspace/opt/example_alloc.wasm index dc84a673332a42c48d46d90e6d84c1bdfe6ed50b..3beb6bf9ae2b45955c08a340bf059c2c8830c03c 100644 GIT binary patch delta 459 zcmYL_&rZTX5XN_gEv4N;YQV%qW2VIeF_IvE3f#IekPwYN1Eu9q^q?;QCLBz>VCuma z@a%yX;4ORypTemeyzG8E-^{na-RJ76y4lFDiuwBX9-LxW2r(psAV7zTbT}>xG8$MS z7|Sqwf`?m+eHh7*q!s}lIiOfcRwN1Zn(hNUVR_I%wrjarOFgIy?Jj)#Oz^ps`W0Ma zevy@3AT4b!kwvC!kj-~_kZ+EI3YP?&cDGPR$W^?h# z1vB+gzwEoN8Pp`pMNcv5-z;H(LXl!ec}N9vOkT{%vF~X2Zu^Y{le}3d1~FOe*@4;N zAC$Qqp0;zq5(l#4-24mNlsowWj7@eH$~stCEIVLlA97b7m63`XQm@F#Z$AU2sMr)D z^$Vo3CR_n*W8)LhootnPgXc-o?IzuJD;h@AIEgNU*)$sTTS?sRMajG~?9W=g!93^+ F@e37iNS*)y delta 451 zcmXAl&rZTX5XN_=EoHk!YS4rP6Q{)kAtB+Pt4%zxF{s2p?*J%=qA@-Jm~iwUsjuMO zgo9V!Lm$A$a0-Xb&Sbvto8Rud^jdmt49ujMjw0Fqa5vD+C2htYM8$$ zfRE{~eX1no8bTzIMKV2f&e2lKzo(hU24J;qY>j2I3Cw~XH6C!eTSK97&j-b0uFBcH zmxNFiCYVO*NN}G|q8*%V7JHoI8gW$soDtN}&L~*GF_G2hMsY(Pxq(B9*+QT*zI`9n z)*wO%fPuVzL6Bz_^R>vlm>8Hwl5kKEJe7ur)0ar5yI87w0fv$hH)=wSLXqTMGDNb- z&CZ|_`KEZix9bX7Y$2G@XPL@i^X%k`1F}B|5`G-BF%hZs+p2<>{#YGQY0+N$ z9G^3gggM^38atnW#oLwV-e5f*wnzHDd8|)6akm{$#*<;I(` F0RWZr4w?V} delta 50 zcmZqYYv+}R5bc@Sm4(-mhd>fz5;Iym1g8?0Fb3h|Vr>;r+!7ASQLNFIv``t69~&aNOL@!jNI+3Shk zUBQj&xqcsg+3(X`4-@u9zu&{C-{VOlyQeQ}r$kFMNT99S_6jWSU`C>?+WuwRF59+7 zKIX3zsrk_JRAEA4laN_M!Yis%BuPmk-&cZk;hgG=`s2qhDCpDpbK-Y-wy>M*?zfL5 zl@A_t8wW|d)9Q4Sy)I3cHZdJEIe)%lDJ9Egwy+xR=dgW!G1e# zAJN$o8y${6F0sww_>&Tw9F9LNTZ_YqnJG5d+Us=Vy=Fq^rr2IKoSkBG+3@@nTg!%@ zm8`LB{P~&IUbCIVouq+)+eeK~>z9P)0KS=QG&bUHjQI^Ef<|LAi4Pj=OB@Kej) z&@$GVtp%D6D7c0*1fQX|L$N?c7=q)xR77}S0>fi(jRNjrwyv==m?lFSQ@RZI7iNPq zgE2-IjnWtO#BA_VNag&8ZTRm3!6EK6h0_o*!{kTBr%~YvpQ?->y&C-J$LH1qL>Ceu zRqVLR5sl3on{CVE>AC0`1hDXZK!}9sgOabruaS2LBz2uO zSmX+gc}9_Wc8t;#?x~BAAj|AXvI@MAvM?$&&bN%07jji$c`!;O4SupRfWcNT9D`Xf zkZ~&{pe{3b#<}FfCA&Vr80rQ>xfh;&F|!pGKp(DGGM*`*6Hc&3Oj?cb%*2RBAU3*V z==<|lESPp-0UF?O9kW=VW5t5ZgqD_e1t%At1ptb}l;o22Enl&ZxrrnV(_(xWL6t4c z8sF`56*#EQNCqoH^jIR;)lBuvHxcDay4el|3wBC-EW5$Z2KYb+U%xKE_^7i7LjlfY zH?Re-A?rU_`GElYgTjaMs&uXp@WSVjc^Y|7g5PinV0~KKVw@4LsHrMTZ%tjY5u>>T znLt_YVl&X&jKG#=JxkE@=6g*#K|SV>j&we1CR zO#8|C;=XAAhGzJ7489aL9rmO1#VlN7T^{1UAr!~>es;r(ml-zRw=@U)b6dJHI3_sE zoOh8UWR9HUh00sT4eJlGJgh{^LR&V7huQBlUi?5hxF)fhE3}mI%R%QbqrZ#g=00vA zakJYwNScSZ`(?lU)r?=r!CSSR9C7z_IzEhdxLX*E(?|X`$Ma(FGH)Z>le_Spw1@4a zws=kcUih|sqkg`2eZ)q^oAJy0IJ2|=u#r4EXtm>RYk#ltFzzPp-MGDtwVvHUbZ)bC zfAge8BkKmsDR)`5)9;FN?t*J=q}b$R$j%+V1fRGkk8|#_{MLP=IOi|byz&3UdHfFl z?pz+f^bfgr629aA3f{avkL~zhhm-e=;+p$^Ve^sl=R@%IjsIV8>YMpCcRCfAWbbe{ z>BgDHoW-71dYB2&*h|0NIZWC%7Ajv}s;w+lzu7}wb$6`p*cZiir?au`mMvA6R+pCN slVoKjSy`^Gudc@%$@=AM&3OHKt(t5sUtLe`U0JO)t5>hzyS75~4`z^pTL1t6 literal 4153 zcmd5$LU1I)eC+%(Nb`T@%_1>`apBu|1?myf*6?Y%pDjU0)zG z&15puuh8k$r+kN;bMK*_#(huPU0_p^$+WcLAU#R%{q+9)R!HFW+6(~Lw+jbszy=3= zKrI_$BL-UL!yz14DAR%%4hJ|I4rmfUs}Fg}W=&Q{lqM@;dxo;Wwg?Q{l5Tf&TZR@_$;nC$0%eqUbyj`0B>D0WXkfnV2d*iQvkdkv4Qs>>9sr5|P4 zn&PhgGS6MeFh_C8NObZ-f#PLhV<*Z2oPADgxC1qLT3}nCm;wYP1?FOh6F9uKs^E}> zvo+b;0%s8v$a%$N2BGF2boP$~B&{K4Z_+JlO4 zTXKU}31H4lWnWI)Cl(bnbE<HbGbFr+hdU=i7*h)uP zre?-TLx=x|n=mtO!i=~H@_pR=V>a9zu@hYg*$GqG=`y4lF_hS8&L_=DTF)K0wsS}4oqpgQ^?P0a=mKxe@h^Fwr3D_Yic|lJ#HDC_;hm9~ z4#!cKyaLla3m20Zu}$KZJk5r1A}rELUZ&q=H}2Amv#T=ZZq)u z&GSzE((C&{+Y3%n*U}aMt0&DTC)1S1^g?w=-0=1Ehvqr)D$p2FZjv#?`%bEA19{_Kqu!{lncozg*h!{Nu_Yz+cT3 BnwkIr diff --git a/soroban-test-wasms/wasm-workspace/opt/example_create_contract.wasm b/soroban-test-wasms/wasm-workspace/opt/example_create_contract.wasm index 95ae6d50f4de986a196405f29c0c8b8321f892fe..4af2b4c32f6b30dfbbe73b9f28e308a96e3c7c84 100644 GIT binary patch delta 50 zcmX@YdW3buEGDhgR1=d_6C;Bp%cR7V)FeZ*M583L6a!N;3u8+YBg?epv_wN=10$0(%M`ODW0O>KL!-phG|MCg F1^|BY4gmlF diff --git a/soroban-test-wasms/wasm-workspace/opt/example_err.wasm b/soroban-test-wasms/wasm-workspace/opt/example_err.wasm index e625632e737c42cef60f31ca70dfec368e9d7cd4..c85247e461d42d48c08c4daa1601f4cdaf5be799 100644 GIT binary patch delta 50 zcmbQuF`HwKL!-phG|MCg F1^|E84h;YR diff --git a/soroban-test-wasms/wasm-workspace/opt/example_fannkuch.wasm b/soroban-test-wasms/wasm-workspace/opt/example_fannkuch.wasm index 535ab0d1a19fffa7d5915b9bf0364749b429d0de..e0486487be5459d8af9b337d00cf6a0ebed93a60 100644 GIT binary patch delta 50 zcmbQhF@a;lGiI&SR1=d_6C;Bp%cR7V)FeZ*KL!-phG|MCg F1^{`o4eS5_ diff --git a/soroban-test-wasms/wasm-workspace/opt/example_fib.wasm b/soroban-test-wasms/wasm-workspace/opt/example_fib.wasm index d68e40516f9ffa91aff84f5e6a4ce30d41672f59..57014cd46c8130dcdc9a76168950e83238351e8a 100644 GIT binary patch delta 50 zcmV~$TLAzN5ClNP@pU-QHkOr7C_&6T_uL)Uld9Ax=$M-bWlgjy+%bbE^|~atQ`DFb Dmx>OQ delta 50 zcmaFD^n_`H6{D7AqEV7rih-$_g|VfHk!4zPTB4z`fssj?Wr|snu}P}Ap;2OLnq?9L F0|0pj4cY(z diff --git a/soroban-test-wasms/wasm-workspace/opt/example_hostile.wasm b/soroban-test-wasms/wasm-workspace/opt/example_hostile.wasm index 8b3c2ce81e97005909c613c2ea933b2a2db9cfb1..277e05af8e1140048fe6aae458e83665d297b3ea 100644 GIT binary patch delta 120 zcmdlla9Ci26eHu0&C-mom>3sMW@8BuR$|g*W-wqL4k)_0}zz9^Nz&!a6O9qpG|K>E-^-Nl+sU{|=CPoHHmPv^zsY!-r$%#o8<_4)L VMy5%rX~vf3$p)qtX=Wx23;>$$9J&Ai delta 110 zcmV-!0FnR05Wf(x8UX?Hvl{{G0s)_s1_V%(z5@ve0}uu`0}vnqlW7D$18e~TldA+t z3LpU~0{|caK?rJ+1!w{fOS5VPuL3GLVKQPiWH2>0I5RmkGC5{rW??ZiFfue|Ib=3s QGc;v4F*0FgW;tR2016} diff --git a/soroban-test-wasms/wasm-workspace/opt/example_invoke_contract.wasm b/soroban-test-wasms/wasm-workspace/opt/example_invoke_contract.wasm index 81c118016ee87b911c67fc80c83007c687459354..15b3eb9ac59d83aa3b06182b1998e63b08e27867 100644 GIT binary patch delta 50 zcmZ3$zkq*38M{_$s)40f&5R1=d_6C;Bp%cR7V)FeZ*40bKcM583L6a!N;3u8+YBg?epv_wN=10$0(%M`ODW0O>KL!-phG|MCg F1^|L^4io?Y diff --git a/soroban-test-wasms/wasm-workspace/opt/example_updateable_contract.wasm b/soroban-test-wasms/wasm-workspace/opt/example_updateable_contract.wasm index 7a3c7985fad51e7fccf8c5f6d3d32726e1c55217..1c1fb9fabe4832ead64898b6715eb91f779aa8eb 100644 GIT binary patch delta 50 zcmV~$$q@h$5ClM_M8jvXu5b(^KFP>O_jAwPU_GfyO@e{BiCEV}Z^E4lc=BjVNa)D)o8k1IPs)a)D)o8k3e~qEV7rih-$_g|VfHk!4zPTB4z`fssj?Wr|snu}P}Ap;2OLnq?9L F0|0Ku4Wj@6 diff --git a/soroban-test-wasms/wasm-workspace/opt/soroban_write_upgrade_bytes_contract.wasm b/soroban-test-wasms/wasm-workspace/opt/soroban_write_upgrade_bytes_contract.wasm index f46f8b7a361d0118981a89a1fc5d4aed70a8b117..870caa76699c9afa5bfcd339521e2aa0bc951433 100644 GIT binary patch delta 50 zcmbQvI-PYxE|XSjs)KL!-phG|MCg F1^|AC4gUZD