Add Digest interface
This commit is contained in:
parent
1e11d8df08
commit
b3f6e45696
15
doc/texinfo/chrono.sol.texi
Normal file
15
doc/texinfo/chrono.sol.texi
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
@subsection Chrono
|
||||||
|
|
||||||
|
Define a creation time for a resource.
|
||||||
|
|
||||||
|
Complements @code{ERC5007}.
|
||||||
|
|
||||||
|
|
||||||
|
@table @dfn
|
||||||
|
@item ERC165 Interface identifier
|
||||||
|
@include ../../build/Chrono.interface
|
||||||
|
@item Solidity interface definition
|
||||||
|
@include ../../build/contract_Chrono.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{https://git.defalsify.org/eth-erc721} (BadgeToken contract)
|
||||||
|
@end table
|
17
doc/texinfo/digest.sol.texi
Normal file
17
doc/texinfo/digest.sol.texi
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
@subsection Digest
|
||||||
|
|
||||||
|
Allows encoding of digests according to a specific encoding scheme.
|
||||||
|
|
||||||
|
Primary use-case is the abstraction of self-describing @uref{https://multiformats.io/multihash/,Multhash} encoding.
|
||||||
|
|
||||||
|
A default encoding @emph{must} always be defined, and the encoding of a valid digest @emph{must} succeed with the default encoding.
|
||||||
|
|
||||||
|
|
||||||
|
@table @dfn
|
||||||
|
@item ERC165 Interface identifier
|
||||||
|
@include ../../build/Digest.interface
|
||||||
|
@item Solidity interface definition
|
||||||
|
@include ../../build/contract_Digest.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{git://holbrook.no/eth-event-msg.git}
|
||||||
|
@end table
|
@ -10,4 +10,6 @@ A contract defining an expiry @emph{must not} allow changing the expiration time
|
|||||||
@include ../../build/Expire.interface
|
@include ../../build/Expire.interface
|
||||||
@item Solidity interface definition
|
@item Solidity interface definition
|
||||||
@include ../../build/contract_Expire.texi
|
@include ../../build/contract_Expire.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||||
@end table
|
@end table
|
||||||
|
@ -13,6 +13,8 @@ Furthermore, it @emph{should} be possible to refer to a resource by a fully-qua
|
|||||||
@include ../../build/Locator.interface
|
@include ../../build/Locator.interface
|
||||||
@item Solidity interface definition
|
@item Solidity interface definition
|
||||||
@include ../../build/contract_Locator.texi
|
@include ../../build/contract_Locator.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{git://holbrook.no/eth-event-msg.git}
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,4 +12,6 @@ The interface complements @code{Locator} and @code{MultiHash} to generate locat
|
|||||||
@include ../../build/Msg.interface
|
@include ../../build/Msg.interface
|
||||||
@item Solidity interface definition
|
@item Solidity interface definition
|
||||||
@include ../../build/contract_Msg.texi
|
@include ../../build/contract_Msg.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{git://holbrook.no/eth-event-msg.git}
|
||||||
@end table
|
@end table
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
@subsection Multihash
|
|
||||||
|
|
||||||
A complement to @code{Locator}, enabling validation and generation of multihashes for multicodecs that have been registered to the contract.
|
|
||||||
|
|
||||||
|
|
||||||
@table @dfn
|
|
||||||
@item ERC165 Interface identifier
|
|
||||||
@include ../../build/MultiHash.interface
|
|
||||||
@item Solidity interface definition
|
|
||||||
@include ../../build/contract_MultiHash.texi
|
|
||||||
@end table
|
|
||||||
|
|
||||||
|
|
||||||
@subsubsection Using @code{Multihash} with @code{Locator}
|
|
||||||
|
|
||||||
Given the data @code{foo}, the digest algorithm @code{sha256} (multihash prefix @code{1220}) and a base url @code{https://contentgateway.grassecon.net}, the result of the methods may be as follows:
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item toURI(sha256(foo))
|
|
||||||
-> @code{"sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"}
|
|
||||||
@item toURL(sha256(foo))
|
|
||||||
-> @code{"https://contentgateway.grassecon.net/12202c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"}
|
|
||||||
@item tokenURI(toUint(sha256(foo)))
|
|
||||||
-> @code{"https://contentgateway.grassecon.net/12202c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"}
|
|
||||||
@end table
|
|
@ -50,6 +50,8 @@ The following well-known solidity interfaces are partially implemented in CIC na
|
|||||||
|
|
||||||
@include declarator.sol.texi
|
@include declarator.sol.texi
|
||||||
|
|
||||||
|
@include digest.sol.texi
|
||||||
|
|
||||||
@include expire.sol.texi
|
@include expire.sol.texi
|
||||||
|
|
||||||
@include faucet.sol.texi
|
@include faucet.sol.texi
|
||||||
@ -60,8 +62,6 @@ The following well-known solidity interfaces are partially implemented in CIC na
|
|||||||
|
|
||||||
@include msg.sol.texi
|
@include msg.sol.texi
|
||||||
|
|
||||||
@include multihash.sol.texi
|
|
||||||
|
|
||||||
@include registry.sol.texi
|
@include registry.sol.texi
|
||||||
|
|
||||||
@include seal.sol.texi
|
@include seal.sol.texi
|
||||||
|
31
doc/texinfo/seal.sol.texi
Normal file
31
doc/texinfo/seal.sol.texi
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
@subsection Seal
|
||||||
|
|
||||||
|
Some smart contract parameters may need to be mutable over part of a smart contract's lifetime.
|
||||||
|
|
||||||
|
This interface provides a method to explicitly signal when certain parameters have been rendered immutable.
|
||||||
|
|
||||||
|
The value of @code{sealState()} @emph{must not} decrease, and must not exceed @code{maxSealState}.
|
||||||
|
|
||||||
|
@code{maxSealState} is used to define that @emph{all mutable parameters} have been rendered immutable. The practical implications of this will vary between contracts.
|
||||||
|
|
||||||
|
The implementer is encouraged to use simple, descriptive names in the source code to describe the applicable seal states.
|
||||||
|
|
||||||
|
Use cases of sealing include:
|
||||||
|
|
||||||
|
@itemize
|
||||||
|
@item
|
||||||
|
Whether more tokens can be minted
|
||||||
|
@item
|
||||||
|
Allow ownership of a contract to be transferred
|
||||||
|
@item
|
||||||
|
The expiry time of a token (see @code{Expire})
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@table @dfn
|
||||||
|
@item ERC165 Interface identifier
|
||||||
|
@include ../../build/Seal.interface
|
||||||
|
@item Solidity interface definition
|
||||||
|
@include ../../build/contract_Seal.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||||
|
@end table
|
@ -24,4 +24,6 @@ Edit access control lists.
|
|||||||
@include ../../build/Writer.interface
|
@include ../../build/Writer.interface
|
||||||
@item Solidity interface definition
|
@item Solidity interface definition
|
||||||
@include ../../build/contract_Writer.texi
|
@include ../../build/contract_Writer.texi
|
||||||
|
@item Example implementation
|
||||||
|
@uref{https://git.grassecon.net/cicnet/erc20-demurrage-token.git}
|
||||||
@end table
|
@end table
|
||||||
|
27
solidity/AccountsIndexMutable.sol
Normal file
27
solidity/AccountsIndexMutable.sol
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
pragma solidity >=0.6.12;
|
||||||
|
|
||||||
|
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
// File-version: 1
|
||||||
|
|
||||||
|
// Extends the AccountsIndex contract to enable account removal and deactivation.
|
||||||
|
|
||||||
|
interface IAccountsIndexMutable {
|
||||||
|
// Active status of address changed, and by whom changed.
|
||||||
|
event AddressActive(address indexed _account, bool _active);
|
||||||
|
|
||||||
|
// Address removed from store, and by whom removed.
|
||||||
|
event AddressRemoved(address _account);
|
||||||
|
|
||||||
|
// Remove an entry from the index. Reduces the entry count.
|
||||||
|
function remove(address) external returns (bool);
|
||||||
|
|
||||||
|
// Deactivate account but keep in index. Does not affect entry count.
|
||||||
|
function deactivate(address) external returns (bool);
|
||||||
|
|
||||||
|
// Activate previously deactivated account. Does not affect entry count.
|
||||||
|
function activate(address) external returns (bool);
|
||||||
|
|
||||||
|
// Check if account exists and is active;
|
||||||
|
function isActive(address) external view returns (bool);
|
||||||
|
}
|
11
solidity/Chrono.sol
Normal file
11
solidity/Chrono.sol
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
pragma solidity >=0.6.12;
|
||||||
|
|
||||||
|
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
// File-version: 1
|
||||||
|
|
||||||
|
interface IChrono {
|
||||||
|
// Returns the timestamp of when a resource corresponding to _idx was first created.
|
||||||
|
// int64 chosen as return value for simpler interoperability with ERC5007.
|
||||||
|
function createTime(uint256 _idx) external returns(int64);
|
||||||
|
}
|
23
solidity/Digest.sol
Normal file
23
solidity/Digest.sol
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
pragma solidity >=0.6.12;
|
||||||
|
|
||||||
|
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
// File-version: 1
|
||||||
|
|
||||||
|
interface IDigest {
|
||||||
|
// Returns the default digest encoding used by the contract instance.
|
||||||
|
function defaultDigestEncoding() external view returns (uint256 _encoding);
|
||||||
|
|
||||||
|
// Check if the given encoding has been implemented in the contract instance.
|
||||||
|
function haveDigestEncoding(uint256 _codec) external view returns(bool);
|
||||||
|
|
||||||
|
// Verify and encode the given digest for a specific hashing algorithm.
|
||||||
|
// Returns a zero-length byte array if digest is invalid.
|
||||||
|
// Must succeed if called with the defaultDigestEncoding and a valid digest.
|
||||||
|
function encodeDigest(bytes memory _data, uint256 _encoding) external view returns (bytes memory);
|
||||||
|
|
||||||
|
// Encodes the digest using the default digest encoding.
|
||||||
|
// Returns a zero-length byte array if digest is invalid.
|
||||||
|
// Must succeed with a valid digest.
|
||||||
|
function encodeDigest(bytes memory _data) external view returns (bytes memory);
|
||||||
|
}
|
15
solidity/ERC5007.sol
Normal file
15
solidity/ERC5007.sol
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
pragma solidity >=0.6.12;
|
||||||
|
|
||||||
|
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
// File-version: 4
|
||||||
|
|
||||||
|
// This is a representation of an officially approved Ethereum Improvement Proposal, written by Anders (@0xanders), Lance (@LanceSnow), Shrug <shrug@emojidao.org>.
|
||||||
|
// It was released under the CC0 license.
|
||||||
|
// The proposal source used as reference was a Markdown file with the following digest:
|
||||||
|
// - sha256:ec5a3d25822e616e032ef27faeb9a7191147a7b18064d95807df20fbc6b69870
|
||||||
|
|
||||||
|
interface IERC5007 {
|
||||||
|
function startTime(uint256 tokenId) external view returns (int64);
|
||||||
|
function endTime(uint256 tokenId) external view returns (int64);
|
||||||
|
}
|
17
solidity/ERC5192.sol
Normal file
17
solidity/ERC5192.sol
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
pragma solidity >=0.6.12;
|
||||||
|
|
||||||
|
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
// File-version: 4
|
||||||
|
|
||||||
|
// This is a representation of an officially approved Ethereum Improvement Proposal, written by Tim Daubenschütz (@TimDaub), Anders (@0xanders).
|
||||||
|
// It was released under the CC0 license.
|
||||||
|
// The proposal source used as reference was a Markdown file with the following digest:
|
||||||
|
// - sha256:c746922587ede699bd1560be0c0db5599104a25c976077d20706ec05340b3b7a
|
||||||
|
|
||||||
|
interface IERC5192 {
|
||||||
|
event Locked(uint256 tokenId);
|
||||||
|
event Unlocked(uint256 tokenId);
|
||||||
|
|
||||||
|
function locked(uint256 tokenId) external view returns (bool);
|
||||||
|
}
|
@ -2,7 +2,7 @@ pragma solidity >=0.6.12;
|
|||||||
|
|
||||||
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
|
||||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
// File-version: 3
|
// File-version: 4
|
||||||
|
|
||||||
interface ILocator {
|
interface ILocator {
|
||||||
// URI that may or may not point to a specific resource location.
|
// URI that may or may not point to a specific resource location.
|
||||||
|
@ -15,8 +15,10 @@ interface IMultiHash {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// All registered multicodecs
|
// All registered multicodecs
|
||||||
function multiCodec(uint256 _codec) external view returns(MultiHash memory);
|
function digestCodec(uint256 _codec) external view returns(MultiHash memory);
|
||||||
|
|
||||||
|
function haveDigestEncoding(uint256 _codec) external view returns(bool);
|
||||||
|
|
||||||
// Generate a multihash from the given digest and current selected multicodec
|
// Generate a multihash from the given digest and current selected multicodec
|
||||||
function toMultiHash(uint256 _codec, bytes memory _digest) external view returns(bytes memory);
|
function encodeDigest(uint256 _codec, bytes memory _digest) external view returns(bytes memory);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user