Skip to content

Commit 042b8ae

Browse files
committed
Add token object function for retrieving the token metadata
Signed-off-by: Mic Bowman <mic.bowman@intel.com>
1 parent cdd083d commit 042b8ae

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

exchange-contract/exchange/contracts/token_object.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,38 @@ const std::string capability_generation_key("capability_generation_key");
4747

4848
static ww::exchange::LedgerStore ledger_store("token_ledger");
4949

50+
// -----------------------------------------------------------------
51+
// NAME: get_token_metadata
52+
//
53+
// Pulls the stored token metadata (which is a serialized JSON object),
54+
// verifies the schema of the metadata, and returns it in the
55+
// token_metadata parameter. The expectation is that this function
56+
// will be called by token classes that specialize token behavior.
57+
// -----------------------------------------------------------------
58+
bool ww::exchange::token_object::get_token_metadata(
59+
const std::string& schema,
60+
ww::value::Object& token_metadata)
61+
{
62+
std::string serialized_token_metadata;
63+
ERROR_IF_NOT(token_object_store.get(token_metadata_key, serialized_token_metadata),
64+
"unexpected error: failed to get token metadata");
65+
66+
ww::value::Object deserialized_token_metadata;
67+
ERROR_IF_NOT(deserialized_token_metadata.deserialize(serialized_token_metadata.c_str()),
68+
"unexpected error: failed to deserialized token metadata");
69+
70+
ww::value::Object token_metadata_schema;
71+
ERROR_IF_NOT(token_metadata_schema.deserialize(schema.c_str()),
72+
"unexpected error: failed to deserialize token metadata schema");
73+
74+
ERROR_IF_NOT(deserialized_token_metadata.validate_schema(token_metadata_schema),
75+
"unexpected error: token metadata does not match schema");
76+
77+
token_metadata.set(deserialized_token_metadata);
78+
return true;
79+
}
80+
81+
5082
// -----------------------------------------------------------------
5183
// METHOD: initialize_contract
5284
// -----------------------------------------------------------------

exchange-contract/exchange/token_object.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ namespace token_object
7676
const ww::value::Object& parameters,
7777
ww::value::Object& capability_result);
7878
79+
bool get_token_metadata(
80+
const std::string& schema,
81+
ww::value::Object& token_metadata);
82+
7983
}; // token_object
8084
}; // exchange
8185
}; // ww

0 commit comments

Comments
 (0)