@@ -9,133 +9,74 @@ use libra_types::{
9
9
} ;
10
10
use std:: slice;
11
11
12
- #[ derive( Debug ) ]
13
- pub struct DevAccountResource {
14
- balance : u64 ,
15
- sequence_number : u64 ,
16
- authentication_key : ByteArray ,
17
- delegated_key_rotation_capability : bool ,
18
- delegated_withdrawal_capability : bool ,
19
- sent_events : EventHandle ,
20
- received_events : EventHandle ,
21
- }
22
-
23
- impl DevAccountResource {
24
- pub fn new ( account_state_blob : AccountStateBlob ) -> Self {
25
- let account_resource = get_account_resource_or_default ( & Some ( account_state_blob) ) . unwrap ( ) ;
26
-
27
- Self {
28
- balance : account_resource. balance ( ) ,
29
- sequence_number : account_resource. sequence_number ( ) ,
30
- authentication_key : account_resource. authentication_key ( ) . clone ( ) ,
31
- delegated_key_rotation_capability : account_resource. delegated_key_rotation_capability ( ) ,
32
- delegated_withdrawal_capability : account_resource. delegated_withdrawal_capability ( ) ,
33
- sent_events : account_resource. sent_events ( ) . clone ( ) ,
34
- received_events : account_resource. received_events ( ) . clone ( ) ,
35
- }
36
- }
37
-
38
- /// Return the authentication_key field for the given AccountResource
39
- pub fn authentication_key ( & self ) -> & ByteArray {
40
- & self . authentication_key
41
- }
42
-
43
- /// Return the balance field for the given AccountResource
44
- pub fn balance ( & self ) -> u64 {
45
- self . balance
46
- }
47
-
48
- /// Return the sequence_number field for the given AccountResource
49
- pub fn sequence_number ( & self ) -> u64 {
50
- self . sequence_number
51
- }
52
-
53
- /// Return the delegated_key_rotation_capability field for the given AccountResource
54
- pub fn delegated_key_rotation_capability ( & self ) -> bool {
55
- self . delegated_key_rotation_capability
56
- }
57
-
58
- /// Return the delegated_withdrawal_capability field for the given AccountResource
59
- pub fn delegated_withdrawal_capability ( & self ) -> bool {
60
- self . delegated_withdrawal_capability
61
- }
62
-
63
- /// Return the sent_events field for the given AccountResource
64
- pub fn sent_events ( & self ) -> & EventHandle {
65
- & self . sent_events
66
- }
67
-
68
- /// Return the received_events field for the given AccountResource
69
- pub fn received_events ( & self ) -> & EventHandle {
70
- & self . received_events
71
- }
72
- }
73
-
74
- #[ no_mangle]
75
- pub unsafe extern "C" fn account_resource_free ( account_resource : * mut CDevAccountResource ) {
76
- let _: Box < DevAccountResource > = Box :: from_raw ( account_resource. cast ( ) ) ;
77
- }
78
-
79
12
#[ no_mangle]
80
- pub unsafe extern "C" fn account_resource_from_lcs (
13
+ pub extern "C" fn account_resource_from_lcs (
81
14
buf : * const u8 ,
82
15
len : usize ,
83
16
) -> CDevAccountResource {
84
- let buf: & [ u8 ] = slice:: from_raw_parts ( buf, len) ;
17
+ let buf: & [ u8 ] = unsafe { slice:: from_raw_parts ( buf, len) } ;
85
18
86
- let account_state_blob: AccountStateBlob = AccountStateBlob :: from ( buf. to_vec ( ) ) ;
87
- let account_resource = DevAccountResource :: new ( account_state_blob) ;
19
+ let account_state_blob = AccountStateBlob :: from ( buf. to_vec ( ) ) ;
20
+ let account_resource =
21
+ get_account_resource_or_default ( & Some ( account_state_blob) ) . expect ( "fixme!" ) ;
88
22
89
- let authentication_key = account_resource. authentication_key . into_inner ( ) ;
90
- let mut key_slice = authentication_key. into_boxed_slice ( ) ;
91
- let authentication_key_ptr = key_slice. as_mut_ptr ( ) ;
92
- std:: mem:: forget ( key_slice) ;
23
+ let mut authentication_key = [ 0u8 ; 32 ] ;
24
+ authentication_key. copy_from_slice ( account_resource. authentication_key ( ) . as_bytes ( ) ) ;
93
25
94
26
let mut sent_key_copy = [ 0u8 ; EVENT_KEY_LENGTH ] ;
95
- sent_key_copy. copy_from_slice ( account_resource. sent_events . key ( ) . as_bytes ( ) ) ;
27
+ sent_key_copy. copy_from_slice ( account_resource. sent_events ( ) . key ( ) . as_bytes ( ) ) ;
96
28
97
29
let sent_events = CEventHandle {
98
- count : account_resource. sent_events . count ( ) ,
30
+ count : account_resource. sent_events ( ) . count ( ) ,
99
31
key : sent_key_copy,
100
32
} ;
101
33
102
34
let mut received_key_copy = [ 0u8 ; EVENT_KEY_LENGTH ] ;
103
- received_key_copy. copy_from_slice ( account_resource. received_events . key ( ) . as_bytes ( ) ) ;
35
+ received_key_copy. copy_from_slice ( account_resource. received_events ( ) . key ( ) . as_bytes ( ) ) ;
104
36
105
37
let received_events = CEventHandle {
106
- count : account_resource. received_events . count ( ) ,
38
+ count : account_resource. received_events ( ) . count ( ) ,
107
39
key : received_key_copy,
108
40
} ;
109
41
110
- return CDevAccountResource {
111
- balance : account_resource . balance ,
112
- sequence : account_resource. sequence_number ,
113
- authentication_key : authentication_key_ptr ,
114
- delegated_key_rotation_capability : account_resource. delegated_key_rotation_capability ,
115
- delegated_withdrawal_capability : account_resource. delegated_withdrawal_capability ,
42
+
43
+ let result = CDevAccountResource {
44
+ balance : account_resource. balance ( ) ,
45
+ sequence : account_resource . sequence_number ( ) ,
46
+ delegated_key_rotation_capability : account_resource. delegated_key_rotation_capability ( ) ,
47
+ delegated_withdrawal_capability : account_resource. delegated_withdrawal_capability ( ) ,
116
48
sent_events,
117
49
received_events,
50
+ authentication_key,
118
51
} ;
52
+
53
+ return result;
119
54
}
120
55
121
56
/// Generate an AccountBlob and verify we can parse it
122
57
#[ test]
123
58
fn test_get_account_resource ( ) {
124
- use std:: { collections:: BTreeMap , convert :: TryInto } ;
59
+ use std:: collections:: BTreeMap ;
125
60
use libra_types:: account_config:: account_resource_path;
126
61
use libra_types:: account_config:: AccountResource ;
62
+ use libra_crypto:: ed25519:: compat;
63
+ use libra_types:: account_address:: AccountAddress ;
64
+
65
+
66
+ let keypair = compat:: generate_keypair ( None ) ;
127
67
128
68
// Figure out how to use Libra code to generate AccountStateBlob directly, not involving btreemap directly
129
69
let mut map: BTreeMap < Vec < u8 > , Vec < u8 > > = BTreeMap :: new ( ) ;
130
70
let ar = AccountResource :: new (
131
71
987654321 ,
132
72
123456789 ,
133
- ByteArray :: new ( vec ! [ 1 , 2 , 3 , 4 ] ) ,
73
+ ByteArray :: new ( AccountAddress :: from_public_key ( & keypair . 1 ) . to_vec ( ) ) ,
134
74
true ,
135
75
false ,
136
76
EventHandle :: default ( ) ,
137
77
EventHandle :: default ( ) ,
138
78
) ;
79
+
139
80
// Fill in data
140
81
map. insert ( account_resource_path ( ) , lcs:: to_bytes ( & ar ) . expect ( "Must success" ) ) ;
141
82
@@ -147,4 +88,11 @@ fn test_get_account_resource() {
147
88
148
89
assert_eq ! ( result. balance, ar. balance( ) ) ;
149
90
assert_eq ! ( result. sequence, ar. sequence_number( ) ) ;
91
+ assert_eq ! ( result. authentication_key, ar. authentication_key( ) . as_bytes( ) ) ;
92
+ assert_eq ! ( result. delegated_key_rotation_capability, ar. delegated_key_rotation_capability( ) ) ;
93
+ assert_eq ! ( result. delegated_withdrawal_capability, ar. delegated_withdrawal_capability( ) ) ;
94
+ assert_eq ! ( result. sent_events. count, ar. sent_events( ) . count( ) ) ;
95
+ assert_eq ! ( result. sent_events. key, ar. sent_events( ) . key( ) . as_bytes( ) ) ;
96
+ assert_eq ! ( result. received_events. count, ar. received_events( ) . count( ) ) ;
97
+ assert_eq ! ( result. received_events. key, ar. received_events( ) . key( ) . as_bytes( ) ) ;
150
98
}
0 commit comments