-
Notifications
You must be signed in to change notification settings - Fork 0
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
feat: [Hardhat] implement nft support for the json rpc api library and js mock … #173
base: main
Are you sure you want to change the base?
Changes from all commits
d6c17f3
45996f4
40eece1
9f4940e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -274,4 +274,54 @@ function slotMapOf(token) { | |||||||||||||||||||||||
return map; | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
module.exports = { slotMapOf, packValues }; | ||||||||||||||||||||||||
/** | ||||||||||||||||||||||||
* Represents the value in the persistent storage. | ||||||||||||||||||||||||
* Each token has its own SlotMap. Any value can be assigned to this storage | ||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
* ad-hoc. It can be used for dynamically determined keys needed to be persistent. | ||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||
class PersistentStorageMap { | ||||||||||||||||||||||||
constructor() { | ||||||||||||||||||||||||
/** @type {Map<string, SlotMap>} */ | ||||||||||||||||||||||||
this._map = new Map(); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
/** | ||||||||||||||||||||||||
* @param {string} tokenId | ||||||||||||||||||||||||
* @param {number} blockNumber | ||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||
_init(tokenId, blockNumber) { | ||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
const key = `${tokenId}:${blockNumber}`; | ||||||||||||||||||||||||
const initialized = this._map.get(key) || new SlotMap(); | ||||||||||||||||||||||||
if (!this._map.has(key)) { | ||||||||||||||||||||||||
this._map.set(key, initialized); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
return initialized; | ||||||||||||||||||||||||
Comment on lines
+294
to
+298
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. to avoid the double guard
Suggested change
|
||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
/** | ||||||||||||||||||||||||
* @param {string} tokenId | ||||||||||||||||||||||||
* @param {number} blockNumber | ||||||||||||||||||||||||
* @param {bigint} slot | ||||||||||||||||||||||||
* @param {Value} value | ||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||
store(tokenId, blockNumber, slot, value) { | ||||||||||||||||||||||||
visit( | ||||||||||||||||||||||||
{ label: 'value', slot: slot.toString(), type: 't_string_storage', offset: 0 }, | ||||||||||||||||||||||||
0n, | ||||||||||||||||||||||||
{ value }, | ||||||||||||||||||||||||
'', | ||||||||||||||||||||||||
this._init(tokenId, blockNumber) | ||||||||||||||||||||||||
); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
/** | ||||||||||||||||||||||||
* @param {string} tokenId | ||||||||||||||||||||||||
* @param {number} blockNumber | ||||||||||||||||||||||||
* @param {bigint} slot | ||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: let's add return type for clarity. |
||||||||||||||||||||||||
load(tokenId, blockNumber, slot) { | ||||||||||||||||||||||||
return this._init(tokenId, blockNumber).load(slot); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
module.exports = { packValues, slotMapOf, PersistentStorageMap }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is some information in the PR description that would be really useful here. In particular 1. of section "The reason I've used persistent storage here" and section "Why it might be an issue".
We should include that info as a JS doc here.