@@ -28,7 +28,7 @@ import (
28
28
"github.com/op/go-logging"
29
29
)
30
30
31
- var myLogger = logging .MustGetLogger ("asset_mgm " )
31
+ var myLogger = logging .MustGetLogger ("asset_mgmt " )
32
32
33
33
// AssetManagementChaincode example simple Asset Management Chaincode implementation
34
34
// with access control enforcement at chaincode level.
@@ -65,15 +65,6 @@ func (t *AssetManagementChaincode) Init(stub shim.ChaincodeStubInterface) pb.Res
65
65
return shim .Error ("Incorrect number of arguments. Expecting 0" )
66
66
}
67
67
68
- // Create ownership table
69
- err := stub .CreateTable ("AssetsOwnership" , []* shim.ColumnDefinition {
70
- & shim.ColumnDefinition {Name : "Asset" , Type : shim .ColumnDefinition_STRING , Key : true },
71
- & shim.ColumnDefinition {Name : "Owner" , Type : shim .ColumnDefinition_BYTES , Key : false },
72
- })
73
- if err != nil {
74
- return shim .Error (fmt .Sprintf ("Failed creating AssetsOnwership table, [%v]" , err ))
75
- }
76
-
77
68
// Set the role of the users that are allowed to assign assets
78
69
// The metadata will contain the role of the users that are allowed to assign assets
79
70
assignerRole , err := stub .GetCallerMetadata ()
@@ -134,19 +125,19 @@ func (t *AssetManagementChaincode) assign(stub shim.ChaincodeStubInterface, args
134
125
}
135
126
136
127
// Register assignment
128
+ // 1.check if the Asset exists, if exists, return error
137
129
myLogger .Debugf ("New owner of [%s] is [% x]" , asset , owner )
138
130
139
- ok , err := stub .InsertRow ("AssetsOwnership" , shim.Row {
140
- Columns : []* shim.Column {
141
- & shim.Column {Value : & shim.Column_String_ {String_ : asset }},
142
- & shim.Column {Value : & shim.Column_Bytes {Bytes : account }}},
143
- })
144
-
145
- if ! ok && err == nil {
146
- fmt .Println ("Error inserting row" )
147
- return shim .Error ("Asset was already assigned." )
131
+ value , err := stub .GetState (asset )
132
+ if err != nil {
133
+ return shim .Error (err .Error ())
134
+ }
135
+ if value != nil {
136
+ return shim .Error (fmt .Sprintf ("Asset %s is already assigned." , asset ))
148
137
}
149
138
139
+ // 2.insert into state
140
+ err = stub .PutState (asset , account )
150
141
if err != nil {
151
142
return shim .Error (err .Error ())
152
143
}
@@ -169,20 +160,14 @@ func (t *AssetManagementChaincode) transfer(stub shim.ChaincodeStubInterface, ar
169
160
170
161
// Verify the identity of the caller
171
162
// Only the owner can transfer one of his assets
172
- var columns []shim.Column
173
- col1 := shim.Column {Value : & shim.Column_String_ {String_ : asset }}
174
- columns = append (columns , col1 )
175
-
176
- row , err := stub .GetRow ("AssetsOwnership" , columns )
163
+ prvOwner , err := stub .GetState (asset )
177
164
if err != nil {
178
- return shim .Error (fmt . Sprintf ( "Failed retrieving asset [%s]: [%s]" , asset , err ))
165
+ return shim .Error (err . Error ( ))
179
166
}
180
-
181
- prvOwner := row .Columns [1 ].GetBytes ()
182
- myLogger .Debugf ("Previous owener of [%s] is [% x]" , asset , prvOwner )
183
- if len (prvOwner ) == 0 {
167
+ if prvOwner == nil {
184
168
return shim .Error ("Invalid previous owner. Nil" )
185
169
}
170
+ myLogger .Debugf ("Previous owener of [%s] is [% x]" , asset , prvOwner )
186
171
187
172
// Verify ownership
188
173
callerAccount , err := impl .NewAccessControlShim (stub ).ReadCertAttribute ("account" )
@@ -200,24 +185,14 @@ func (t *AssetManagementChaincode) transfer(stub shim.ChaincodeStubInterface, ar
200
185
}
201
186
202
187
// At this point, the proof of ownership is valid, then register transfer
203
- err = stub .DeleteRow (
204
- "AssetsOwnership" ,
205
- []shim.Column {shim.Column {Value : & shim.Column_String_ {String_ : asset }}},
206
- )
188
+ err = stub .DelState (asset )
207
189
if err != nil {
208
- return shim .Error ("Failed deliting row." )
190
+ return shim .Error (err . Error () )
209
191
}
210
192
211
- _ , err = stub .InsertRow (
212
- "AssetsOwnership" ,
213
- shim.Row {
214
- Columns : []* shim.Column {
215
- & shim.Column {Value : & shim.Column_String_ {String_ : asset }},
216
- & shim.Column {Value : & shim.Column_Bytes {Bytes : newOwnerAccount }},
217
- },
218
- })
193
+ err = stub .PutState (asset , newOwnerAccount )
219
194
if err != nil {
220
- return shim .Error ("Failed inserting row." )
195
+ return shim .Error (err . Error () )
221
196
}
222
197
223
198
return shim .Success (nil )
@@ -253,25 +228,18 @@ func (t *AssetManagementChaincode) query(stub shim.ChaincodeStubInterface, args
253
228
254
229
fmt .Printf ("ASSET: %v" , string (asset ))
255
230
256
- var columns []shim.Column
257
- col1 := shim.Column {Value : & shim.Column_String_ {String_ : asset }}
258
- columns = append (columns , col1 )
259
-
260
- row , err := stub .GetRow ("AssetsOwnership" , columns )
231
+ owner , err := stub .GetState (asset )
261
232
if err != nil {
262
- jsonResp := "{\" Error\" :\" Failed retrieving asset " + asset + ". Error " + err .Error () + ". \" }"
263
- return shim .Error (jsonResp )
233
+ return shim .Error ("{\" Error\" :\" Failed retrieving asset " + asset + ". Error " + err .Error () + ". \" }" )
264
234
}
265
-
266
- if len (row .Columns ) == 0 {
267
- jsonResp := "{\" Error\" :\" Failed retrieving owner for " + asset + ". \" }"
268
- return shim .Error (jsonResp )
235
+ if owner == nil {
236
+ return shim .Error (fmt .Sprintf ("{\" Error\" :\" Failed retrieving owner for " + asset + ". \" }" ))
269
237
}
270
238
271
- jsonResp := "{\" Owner\" :\" " + string (row . Columns [ 1 ]. GetBytes () ) + "\" }"
239
+ jsonResp := "{\" Owner\" :\" " + string (owner ) + "\" }"
272
240
fmt .Printf ("Query Response:%s\n " , jsonResp )
273
241
274
- return shim .Success (row . Columns [ 1 ]. GetBytes () )
242
+ return shim .Success (owner )
275
243
}
276
244
277
245
func main () {
0 commit comments