Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

types: rencode ObjectDigests in base64 until TS sdk can support base58 #8070

Merged
merged 1 commit into from
Feb 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions crates/sui-core/tests/staged/sui.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -360,8 +360,7 @@ ObjectArg:
- initial_shared_version:
TYPENAME: SequenceNumber
ObjectDigest:
NEWTYPESTRUCT:
TYPENAME: Sha3Digest
NEWTYPESTRUCT: BYTES
ObjectFormatOptions:
STRUCT:
- include_types: BOOL
Expand Down
4 changes: 2 additions & 2 deletions crates/sui-indexer/src/models/transactions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ pub fn transaction_response_to_new_transaction(
let gas_object_ref = tx_resp.effects.gas_object.reference.clone();
let gas_object_id = gas_object_ref.object_id.to_string();
let gas_object_seq = gas_object_ref.version;
// canonical object digest is Base58 encoded
let gas_object_digest = gas_object_ref.digest.base58_encode();
// canonical object digest is Base64 encoded
let gas_object_digest = gas_object_ref.digest.base64_encode();

let gas_summary = tx_resp.effects.gas_used;
let computation_cost = gas_summary.computation_cost;
Expand Down
50 changes: 25 additions & 25 deletions crates/sui-open-rpc/spec/openrpc.json
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
"gas": {
"objectId": "0xf5b70ccb10f1a705e061d0fdfa189618d28b0d44",
"version": 1,
"digest": "HkV9zVH43ELJvw3yX5M3DAG65QLsDEo2k4KGABFzKNw2"
"digest": "+N7M88PFGPFG3pVU8D8nqD1bEYXznnHvNX4r2eE5YlE="
},
"inputObjects": [
{
Expand All @@ -137,14 +137,14 @@
"ImmOrOwnedMoveObject": {
"objectId": "0xefef92cbf44b581f23222c10916b17a369b4da03",
"version": 1,
"digest": "BZyWTosM9Sqb9h7tQxzv9Ym9vCqo1kbREX1iG9qAhk5c"
"digest": "nQdZUrWANvKntWFEZZJAPGcvDb4Snx45ET+fYWTqKGc="
}
},
{
"ImmOrOwnedMoveObject": {
"objectId": "0xf5b70ccb10f1a705e061d0fdfa189618d28b0d44",
"version": 1,
"digest": "HkV9zVH43ELJvw3yX5M3DAG65QLsDEo2k4KGABFzKNw2"
"digest": "+N7M88PFGPFG3pVU8D8nqD1bEYXznnHvNX4r2eE5YlE="
}
}
]
Expand Down Expand Up @@ -300,7 +300,7 @@
"objectRef": {
"objectId": "0x3027b783ea689e1a38eb476c6efc44edb5cd3dfe",
"version": 2,
"digest": "AwF2HjS5AYuMpgmSyfTWEuofPVE2Kn1JGeWJxGxg3Pa"
"digest": "AouPAuQwKlWV2IiaZ8bTHGyXDlZ/A+9n2BGk+ENmW40="
}
}
}
Expand All @@ -309,7 +309,7 @@
"gasPayment": {
"objectId": "0x32f4bf6c3e8ac42eef1385e01403e49a4b296adc",
"version": 2,
"digest": "CzYpDvim5chUHfZ4JkdYFzKdbwK2dXfHpS3SBSseAYm9"
"digest": "si6ifTyS5M4iVqxkXLq9w2zxufLshIGibKfYEWlVl5Q="
},
"gasPrice": 1,
"gasBudget": 1000
Expand Down Expand Up @@ -348,7 +348,7 @@
"reference": {
"objectId": "0x32f4bf6c3e8ac42eef1385e01403e49a4b296adc",
"version": 2,
"digest": "CzYpDvim5chUHfZ4JkdYFzKdbwK2dXfHpS3SBSseAYm9"
"digest": "si6ifTyS5M4iVqxkXLq9w2zxufLshIGibKfYEWlVl5Q="
}
},
{
Expand All @@ -358,7 +358,7 @@
"reference": {
"objectId": "0x3027b783ea689e1a38eb476c6efc44edb5cd3dfe",
"version": 2,
"digest": "AwF2HjS5AYuMpgmSyfTWEuofPVE2Kn1JGeWJxGxg3Pa"
"digest": "AouPAuQwKlWV2IiaZ8bTHGyXDlZ/A+9n2BGk+ENmW40="
}
}
],
Expand All @@ -369,7 +369,7 @@
"reference": {
"objectId": "0x32f4bf6c3e8ac42eef1385e01403e49a4b296adc",
"version": 2,
"digest": "CzYpDvim5chUHfZ4JkdYFzKdbwK2dXfHpS3SBSseAYm9"
"digest": "si6ifTyS5M4iVqxkXLq9w2zxufLshIGibKfYEWlVl5Q="
}
},
"events": [
Expand Down Expand Up @@ -1216,7 +1216,7 @@
"reference": {
"objectId": "0x6b0a41403276437b25f0ffbe897cf476c0777e9d",
"version": 1,
"digest": "CmvrMzn3qVkwJtZfkCNAQEDN11pV6t8mR8zdDPaayAn7"
"digest": "rvMAWuZzOAnI7B1bhN1iieGTufiN5KmUNYyfhWE1I2w="
}
}
}
Expand Down Expand Up @@ -1267,7 +1267,7 @@
{
"objectId": "0xf6c012cded9ef9ba5e5bf042464b5ca6488b897c",
"version": 0,
"digest": "12Pe8JN96upsApMseeghANkkNMKUWA6Bz4JD5NTWko2q",
"digest": "AFsuF/APwLyOftPyq1nWB7DjWGvaHNpOQrQUWyb6Neo=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"AddressOwner": "0x3568c40e814d9d5396d23087a0fd641e91e0e00d"
Expand All @@ -1277,7 +1277,7 @@
{
"objectId": "0xc11638af89d575beb99003d30a245ac74a02e26e",
"version": 0,
"digest": "5hT7RhY6v7aUL8CNJ91QyurVnXFQrG25ccgP5rQGwXfe",
"digest": "RcuA7hucAKkzRc5fEr6p/+BHSNZpbDBjFzUZOuqVuPk=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"AddressOwner": "0x3568c40e814d9d5396d23087a0fd641e91e0e00d"
Expand All @@ -1287,7 +1287,7 @@
{
"objectId": "0x6b632eafa229ec3dd885442b44972526c4e8ce25",
"version": 0,
"digest": "Bna6Kzi331fiwRV61jWuigECAgmiP5BDRhXRWPSj44QE",
"digest": "oEFsOVXYGLsasOgyh31igjPj4dZPdrcagOxPMy9NGmc=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"AddressOwner": "0x3568c40e814d9d5396d23087a0fd641e91e0e00d"
Expand All @@ -1297,7 +1297,7 @@
{
"objectId": "0x842f736ab973e87f53b4857842789a1dd5916762",
"version": 0,
"digest": "BSyaW5dEKRbS8JTSCD12egRkA22w2fNEZnpXx4vnG1BL",
"digest": "mzxcq+R9v0iCfsCBjgDeSyl/BHw77aQ9bp+bGxvETN8=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"AddressOwner": "0x3568c40e814d9d5396d23087a0fd641e91e0e00d"
Expand Down Expand Up @@ -1352,7 +1352,7 @@
{
"objectId": "0x5687fee73fac7a2c564da689e9da76e1430d191f",
"version": 0,
"digest": "Dh865EkUHa618sXQbkcn7psXQ6ggxZ6UFF8tTAqFTCCm",
"digest": "vJN9QvdBBKopGHH0udEg92WDodpdESPyuKCsYGuUCmY=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"ObjectOwner": "0x0a7c6df2389c373c8fbe06bda7a61120652668dd"
Expand All @@ -1362,7 +1362,7 @@
{
"objectId": "0x515cf7ca6afb887dd1e09be8e451cd3c36407662",
"version": 0,
"digest": "53FQJhUHQqRektpSXPdyn55rjqh3K142iR8jtdPiRZ54",
"digest": "PAIxiYvgciwI5OsinETLlX0pz3Nwr4obnFQtSbPIPPs=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"ObjectOwner": "0x0a7c6df2389c373c8fbe06bda7a61120652668dd"
Expand All @@ -1372,7 +1372,7 @@
{
"objectId": "0xea244dd060d2b6538196d048b7a6d04c8edc8957",
"version": 0,
"digest": "BbvPqWMmcEUsuMtLzcM6xm91mwyauMZtPFpmzh8vvPRY",
"digest": "nYb9P8kMUvmhTGuBK5T+YTxbzrte6x1EniUWFm1X1x8=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"ObjectOwner": "0x0a7c6df2389c373c8fbe06bda7a61120652668dd"
Expand All @@ -1382,7 +1382,7 @@
{
"objectId": "0xf5e2facded84d03b5373514f16e3d66e00081051",
"version": 0,
"digest": "7nDZ5J4VyvYGUbX2f6mQdhkr3RFrb3vZqui1ogoyApD9",
"digest": "ZLtzoe1YssGLDL83d5LiBua4DU1e6mTi5wVjsViQJsQ=",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"ObjectOwner": "0x0a7c6df2389c373c8fbe06bda7a61120652668dd"
Expand Down Expand Up @@ -1448,7 +1448,7 @@
"reference": {
"objectId": "0x4b2e27c1eed56c33b579034150ea46bccf7653e0",
"version": 1,
"digest": "4bTW1xuz9VBmMryJQDc3mMvHEkgUye59fxvChc12QnHp"
"digest": "NWbFsqU1QQ3aod0/xK8yGNdsx6pr4YAE5eOMs1zK8Ys="
}
}
}
Expand Down Expand Up @@ -1594,7 +1594,7 @@
"objectRef": {
"objectId": "0x5e147a1eee2edd23714474444689c946f69a5859",
"version": 2,
"digest": "8X6EyzKmKDfKsoyuo4fNJUHPCfvkZZTiEDVXzYDXoLQa"
"digest": "b7coq0GHgxIG0VGB/3xQdyQXWGqTYzgp/LptbgzLE9M="
}
}
}
Expand All @@ -1603,7 +1603,7 @@
"gasPayment": {
"objectId": "0x24b91c4b8ae6d4cd6e1e02f6658d21bce9b88bdc",
"version": 2,
"digest": "H5VAcXDuQ4SXWSYnmyLs3VPSCH5pKt6NCvwxruM6XfML"
"digest": "7uEpQUTuxHzzk4i7aA9pt0JrxSkpaS/cfS/zdMP4cPM="
},
"gasPrice": 1,
"gasBudget": 1000
Expand Down Expand Up @@ -1642,7 +1642,7 @@
"reference": {
"objectId": "0x24b91c4b8ae6d4cd6e1e02f6658d21bce9b88bdc",
"version": 2,
"digest": "H5VAcXDuQ4SXWSYnmyLs3VPSCH5pKt6NCvwxruM6XfML"
"digest": "7uEpQUTuxHzzk4i7aA9pt0JrxSkpaS/cfS/zdMP4cPM="
}
},
{
Expand All @@ -1652,7 +1652,7 @@
"reference": {
"objectId": "0x5e147a1eee2edd23714474444689c946f69a5859",
"version": 2,
"digest": "8X6EyzKmKDfKsoyuo4fNJUHPCfvkZZTiEDVXzYDXoLQa"
"digest": "b7coq0GHgxIG0VGB/3xQdyQXWGqTYzgp/LptbgzLE9M="
}
}
],
Expand All @@ -1663,7 +1663,7 @@
"reference": {
"objectId": "0x24b91c4b8ae6d4cd6e1e02f6658d21bce9b88bdc",
"version": 2,
"digest": "H5VAcXDuQ4SXWSYnmyLs3VPSCH5pKt6NCvwxruM6XfML"
"digest": "7uEpQUTuxHzzk4i7aA9pt0JrxSkpaS/cfS/zdMP4cPM="
}
},
"events": [
Expand Down Expand Up @@ -2873,7 +2873,7 @@
"reference": {
"objectId": "0x3e75a925e1c77ac34127c8baefbea0939f152471",
"version": 4,
"digest": "2C2xqKAT9RFdZAKSRm7uFcRMQ6AF1TLnkhe9ZQnnz2xo"
"digest": "Ea9LhE/5Sz++9uNrUY2jrUxYVvpoZGRSSodrRj0Sl2A="
}
}
}
Expand Down Expand Up @@ -4616,7 +4616,7 @@
}
},
"ObjectDigest": {
"$ref": "#/components/schemas/Sha3Digest"
"$ref": "#/components/schemas/Base64"
},
"ObjectID": {
"$ref": "#/components/schemas/Hex"
Expand Down
4 changes: 2 additions & 2 deletions crates/sui-storage/src/event_store/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use std::usize;
use anyhow::anyhow;
use async_trait::async_trait;
use enum_dispatch::enum_dispatch;
use fastcrypto::encoding::{Base58, Encoding};
use fastcrypto::encoding::{Base64, Encoding};
use flexstr::SharedStr;
use futures::prelude::stream::BoxStream;
use move_core_types::identifier::Identifier;
Expand Down Expand Up @@ -344,7 +344,7 @@ impl StoredEvent {
fn object_digest(&self) -> Result<Option<ObjectDigest>, anyhow::Error> {
self.extract_string_field(OBJECT_DIGEST_KEY)?
.map(|opt| {
Base58::decode(&opt)
Base64::decode(&opt)
.map_err(|e| anyhow!(e))
.and_then(|op| ObjectDigest::try_from(op.as_ref()).map_err(|e| anyhow!(e)))
})
Expand Down
2 changes: 1 addition & 1 deletion crates/sui-storage/src/event_store/sql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ impl SqlEventStore {
fields.insert(BALANCE_CHANGE_TYPE_KEY, (*change_type as usize).to_string());
}
if let Some(digest) = event.event.digest() {
fields.insert(OBJECT_DIGEST_KEY, ObjectDigest::base58_encode(&digest));
fields.insert(OBJECT_DIGEST_KEY, ObjectDigest::base64_encode(&digest));
}
json!(fields).to_string()
}
Expand Down
34 changes: 22 additions & 12 deletions crates/sui-types/src/digests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
use std::fmt;

use crate::sui_serde::Readable;
use fastcrypto::encoding::{Base58, Encoding};
use fastcrypto::encoding::{Base58, Base64, Encoding};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_with::{serde_as, Bytes};
Expand Down Expand Up @@ -460,8 +460,14 @@ impl fmt::UpperHex for TransactionEffectsDigest {
}

// Each object has a unique digest
#[serde_as]
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, JsonSchema)]
pub struct ObjectDigest(Sha3Digest);
pub struct ObjectDigest(
#[schemars(with = "Base64")]
#[serde_as(as = "Readable<Base64, Bytes>")]
[u8; 32],
// Sha3Digest,
);

impl ObjectDigest {
pub const MIN: ObjectDigest = Self::new([u8::MIN; 32]);
Expand All @@ -478,29 +484,33 @@ impl ObjectDigest {
Self::new([Self::OBJECT_DIGEST_WRAPPED_BYTE_VAL; 32]);

pub const fn new(digest: [u8; 32]) -> Self {
Self(Sha3Digest::new(digest))
Self(Sha3Digest::new(digest).into_inner())
}

pub fn generate<R: rand::RngCore + rand::CryptoRng>(rng: R) -> Self {
Self(Sha3Digest::generate(rng))
Self(Sha3Digest::generate(rng).into())
}

pub fn random() -> Self {
Self(Sha3Digest::random())
Self(Sha3Digest::random().into())
}

pub const fn inner(&self) -> &[u8; 32] {
self.0.inner()
&self.0
}

pub const fn into_inner(self) -> [u8; 32] {
self.0.into_inner()
self.0
}

pub fn is_alive(&self) -> bool {
*self != Self::OBJECT_DIGEST_DELETED && *self != Self::OBJECT_DIGEST_WRAPPED
}

pub fn base64_encode(&self) -> String {
Base64::encode(self.0)
}

pub fn base58_encode(&self) -> String {
Base58::encode(self.0)
}
Expand All @@ -514,7 +524,7 @@ impl AsRef<[u8]> for ObjectDigest {

impl AsRef<[u8; 32]> for ObjectDigest {
fn as_ref(&self) -> &[u8; 32] {
self.0.as_ref()
&self.0
}
}

Expand All @@ -532,25 +542,25 @@ impl From<[u8; 32]> for ObjectDigest {

impl fmt::Display for ObjectDigest {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(&self.0, f)
fmt::Debug::fmt(&self, f)
}
}

impl fmt::Debug for ObjectDigest {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "o#{}", self.0)
write!(f, "o#{}", self.base64_encode())
}
}

impl fmt::LowerHex for ObjectDigest {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(&self.0, f)
fmt::LowerHex::fmt(&Sha3Digest::new(self.0), f)
}
}

impl fmt::UpperHex for ObjectDigest {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::UpperHex::fmt(&self.0, f)
fmt::UpperHex::fmt(&Sha3Digest::new(self.0), f)
}
}

Expand Down