Releases: EVVM-org/testnet-Contracts
v3.1.0
Codename: "Kitsuragi"
Named after Kim Kitsuragi from Disco Elysium. Just as Kim methodically verifies every action before it proceeds, this release makes canExecuteUserTransaction public and introduces senderExecutor/originExecutor every transaction must pass through a transparent checkpoint that enforces strict rules while remaining accessible to any external service.
Changed
-
Use of executors:
- All services must now specify
senderExecutorandoriginExecutoras inputs for transactions. The signature verification inCore.solvalidates thatsenderExecutormatches the actual caller (msg.sender) andoriginExecutormatches the transaction origin (tx.origin) when set. This enables flexible multi-service transaction flows while ensuring only authorized executors can process transactions on behalf of users. - When a service dispatches payments (e.g.,
payinCore.sol), bothoriginExecutorandsenderExecutormust be set to the service address. This provides clear tracking of payment origins across the EVVM ecosystem and enables complex multi-service transaction flows with full accountability for payment execution.
- All services must now specify
-
Signature standardization: To reflect the executor-based transaction flow, the standardized signature payload has been updated:
"<evvmID>,<senderExecutor>,<hashPayload>,<originExecutor>,<nonce>,<isAsyncExec>"
-
Core.sol:
- Refactored
_canExecuteUserTransactionfunction tocanExecuteUserTransactionand made itpublicto allow external services to check if a user transaction can be executed based on the current state of the system, including nonce validation and user validation logic. - Change signature and nonce consumption logic in
canExecuteUserTransactionto be flexible on what service wnat to call, if you put onsenderExecutoraddress(0)any service with the same signature structure can call it and consume but if you want to restrict it to a specific service you can put the service address and only that service will be able to call it and consume the nonce, this allows for more flexible multi-service transaction flows while maintaining security against attacks.
- Refactored
-
Gas Optimization:
- Refactored input handling modifiers across all services to use
calldatainstead ofmemoryfor external function parameters, reducing gas costs for transactions that involve large data inputs by avoiding unnecessary copying of data into memory. - Updated algorithms accross services whose use
forloops to useuncheckedblocks where safe to do so, eliminating redundant overflow checks and further reducing gas costs in scenarios with multiple iterations.
- Refactored input handling modifiers across all services to use
-
Core.sol: Refactored
breakerSetupNameServiceAddressvariable frombytes1toboolfor better gas efficiency. -
Documentation: Updated NatSpec documentation across all contracts to reflect changes in transaction execution flow, signature structure, and input handling for improved clarity and maintainability.
-
Testing: Refactored and added tests to cover new executor-based transaction flow, signature structure, and input handling changes, including scenarios for authorized and unauthorized executors, multi-service transaction flows, and gas optimization effects.
v3.0.3
v3.0.2
Added
- Core.sol:
- Added
verifyTokenInteractionAllowancefunction to check if a token is allowed for interaction (deposit, payment) based on theallowListanddenyListstatus, improving security and control over token usage in the EVVM ecosystem. - Added
proposeListStatus,rejectListStatusProposalandacceptListStatusProposalfunctions to manage proposals for changing the active token list (none, allowList or denyList), enabling a flexible governance mechanism for token permissions in the system. - Added
setTokenStatusOnAllowListandsetTokenStatusOnDenyListfunctions to allow the admin to update the status of specific tokens on the allowList and denyList, providing granular control over which tokens are permitted or denied for use in the EVVM. - Added
rewardFlowDistributionflag struct and logic to ensure that if the 99.99% of total supply is distributed the reward flow distribution can be stooped to prevent further rewards from being distributed, which can be used as a safety mechanism to preserve remaining supply in extreme scenarios or be re enabled if needed in the future. - Added admin functions to "delete" the maximum supply by setting it to the maximum uint256 value, with a timelock mechanism to prevent immediate deletion and allow for community oversight before such a critical change is made.
- Added admin functions to change the base reward amount if the total supply is not fixed, with a timelock mechanism to prevent immediate changes and allow for community oversight before such a critical change is made.
- Added
- CoreStorage.sol: Added
allowListanddenyListmappings to track token addresses that are allowed or denied for use in the EVVM, along withlistStatusto indicate which list is active, providing a flexible mechanism for managing token permissions in the system. - ProposalStructs.sol: Added
Bytes1TypeProposalstruct to represent proposals for bytes1 type parameters. - Tests:
- Added comprehensive tests for the new token list management functionality in
Core.sol, including tests for proposing, accepting, and rejecting list status changes, as well as verifying token interaction allowances based on the active list. - Added tests for the
rewardFlowDistributionflag to ensure it correctly stops reward distribution when 99.99% of total supply is distributed and allows re-enabling if needed. - Added tests for the new admin functions to delete total supply and change base reward amount, including checks for proper timelock enforcement and access control.
- Added comprehensive tests for the new token list management functionality in
Changed
- Core.sol: Refactor TypeProposal getter functions to return
- The current status of the proposal
- The full proposal struct with all details for better transparency and usability in the frontend and other services.
- Improved
getRandomwith additional entropy sources (blockhash, tx.origin, gasleft). - Revert mesages for accepting proposals before timelock have been standardized to
ProposalNotReadyToAcceptfor better clarity and consistency across different proposal types in the system. - Refactored
getTimeToAcceptImplementation,getProposalImplementationinto a singlegetFullDetailImplementationfunction that returns all variables into a struct for better efficiency and usability in the frontend and other services. - Rename
getUserValidatorAddressDetailstogetFullDetailUserValidatorfor better clarity and consistency in naming conventions. - Rename
canExecuteUserTransactionto_canExecuteUserTransactionto indicate its internal use and prevent confusion with potential external functions.
- P2PSwap.sol: Refactor to remove Metadata struct and replace with direct parameters.
Fixed
- CLI: Fixed bug where all
.executables/*files were the Linux ELF build; running./evvm/evvm.baton macOS or Windows produced “cannot execute binary file”. Wrapper scripts now detect exit‑126 failures, fall back tobun run cli/index.tsif Bun is installed, and emit a clear error otherwise. (Proper platform binaries are now produced by CI.)
v3.0.0
Codename: "Ichiban"
Named after Ichiban Kasuga from Yakuza: Like a Dragon, this release embodies the spirit of rebuilding from the ground up. Just as Ichiban rebuilt his life and united scattered allies into a cohesive team, this release fundamentally restructures EVVM by centralizing previously fragmented functionalities into a unified Core. The name reflects both its literal meaning ("number one") and the protagonist's journey of transforming chaos into order, mirroring how this version consolidates from disparate services into a single, robust foundation for the entire EVVM ecosystem.
Added
- Changelog: Added codenames to releases for a more engaging and memorable version history
- Signature standardization: Implemented a standardized signature payload construction method in
AdvancedStrings.solto ensure consistent signature generation and verification across all EVVM services, improving security and interoperability- This standard consists of concatenating the following parameters in order:
"<evvmID>,<serviceAddress>,<hashInput>,<executor>,<nonce>,<isAsyncExec>"wherehashInputis a service-specific hash of the relevant transaction data usingkeccak256(abi.encode("functionName", param1, param2, ...))andexecutorrepresents the address executing the transaction (origin executor service transactions and sender for payment transactions onCore.sol). This standardization allows for a single signature verification method inCore.solthat can be used across all services, eliminating inconsistencies and potential security vulnerabilities from service-specific signature implementations.
- This standard consists of concatenating the following parameters in order:
- Core.sol:
- A new core contract to:
- Manage treasury deposits and withdrawals
- Handle payments
- Handle signature verification for all EVVM transactions
- A centralized nonce for async and sync nonce validation across EVVM services preventing replay attacks in multi-service transactions
- A new core contract to:
- ICore: Interface for cross-contract interaction with Core.sol
- Core tests: Added comprehensive tests for Core.sol covering payment handling, signature verification, and nonce management
- AdvancedStrings.sol:
buildSignaturePayloadfunction for standardized signature generation and verification - Hashing utilities: Added service-specific hashing functions in
/library/utils/signature/for consistent payload construction across services - Deployment script: Updated to deploy Core.sol and set its address in the services during deployment
- IUserValidator: Interface for user validation logic in Core.sol, allowing for flexible access control in evvm transactions
- CA Verification Library: Added
CAUtils.solfor verifying if a certain address is a CA, which can be used in user validation logic in Core.sol - CoreExecution Library: Added
CoreExecution.solfor handling core execution logic on services. - Github templates:
- Added
CONTRIBUTING.mdwith contribution guidelines for the community - Added
PULL_REQUEST_TEMPLATE.mdto standardize pull request submissions and ensure necessary information is provided for reviews - Added
SECURITY.mdwith security best practices and reporting guidelines for responsible disclosure of vulnerabilities
- Added
Changed
- Payment service handling inputs: Change
<variableName>Evvmor<variableName>_EVVMnaming convention for all payment handling related variables across services to<variableName>Payto clearly indicate their purpose in payment handling logic - Cli:
- Changed CLI deployment script to deploy
Core.sol - Updated CLI test script to reflect changes in CLI deployment and interaction with
Core.sol - Updated CLI contract interface generation to include
Core.solstate variables and functions - Updated CLI evvm verification to use
Core.sol
- Changed CLI deployment script to deploy
- Error handling: Standardized error naming (e.g.,
CoreError,NameServiceError) and established a consistent import aliasing pattern across all services for improved maintainability - Payment functions: Renamed
payMultipletobatchPayandBatchData(formerlyPayData) inCore.sol(formerlyEvvm.sol) for clarity - Import paths: Moved all struct libraries from
contracts/<service>/lib/tolibrary/structs/for better organization - Parameter naming:
priorityFlagtoisAsyncExecfor clearer async execution identification
- Contract naming: Renamed
AdminControlledtoAdmininlibrary/utils/governance/Admin.sol - Core (before called Evvm.sol)
- Changed
_setupNameServiceAndTreasuryAddresstoinitializeSystemContractsto generalize the function for setting up system contracts (NameService, Treasury) in one call during deployment - Updated
CoreStructs(formerlyEvvmStructs) to interact as a library instead of an abstract contract for better modularity and reuse across services - Implemented centralized nonce management and signature verification, replacing Evvm's previous nonce management and signature utilities
- Changed
- NameService:
- Updated variable name
clowNumbertolockNumberandexpireDatetoexpirationDatefor better clarity - Updated
NameServiceStructsto be a library instead of an abstract contract for better modularity and reuse across services - Implemented
Core.solfor nonce validation and signature verification replacing previous service-specific nonce management and signature utilities - Now both
nonceandnoncePayare async nonces managed byCore.solto prevent replay attacks in multi-service transactions, replacing the previous service-specific nonce management
- Updated variable name
- P2PSwap:
- Implemented
Core.solfor nonce validation and signature verification replacing previous service-specific nonce management and signature utilities - Now both
nonceandnoncePayare async nonces managed byCore.solto prevent replay attacks in multi-service transactions, replacing the previous service-specific nonce management
- Implemented
- Staking:
- Implemented
Core.solfor nonce validation and signature verification replacing previous service-specific nonce management - Updated
StakingStructsto be a library instead of an abstract contract for better modularity and reuse across services - Changed
_setupEstimatorAndEvvmtoinitializeSystemContractsto generalize the function for setting up all critical system contracts (Evvm, Estimator, Core) in one call during deployment - Implemented
nonceandnoncePayas async nonces for public and presale staking viaCore.solto prevent multi-service replay attacks
- Implemented
- Cross Chain Treasury:
- Implemented
Core.solfor nonce validation and signature verification replacing previous service-specific nonce management and signature utilities - Updated
ExternalChainStationStructsandHostChainStationStructsto be a library instead of an abstract contract for better modularity and reuse across services
- Implemented
- NatSpec documentation: Updated and added NatSpec documentation across all contracts for improved clarity and maintainability
- Testing: Refactored and added tests to cover new
Core.solfunctionality and its integration with services, including payment handling, signature verification, and nonce management scenarios - Github templates: Updated
bug_report.mdandfeature_request.mdtemplates to includeCore.solas an option
Removed
- Evvm.sol: Renamed to
Core.soland refactored to centralize core EVVM functionalities such as payment handling, signature verification, and nonce management - Service-specific nonce management: All nonce management is now centralized in
Core.solfor improved security and consistency across services - Service SignatureUtils: Removed service-specific signature utilities because signature generation and verification is now centralized in
Core.solusingAdvancedStrings.solfor payload construction - Redundant Structs: Removed all governance-related structs from individual service struct libraries, as they are now centralized in
ProposalStructs.solfor better organization and reuse - Service nonce libraries: Removed all service-specific nonce libraries, as nonce management is now handled by
Core.sol - Github templates: Removed references to
Evvm.solinbug_report.mdandfeature_request.mdtemplates
Fixed
- CLI:
- Default values for Hyperlane, LayerZero, and Axelar data when user opts not to add on cli deployment script are now properly set to empty values instead of undefined
- Updated CLI prompts to support async input handling and cursor navigation
v2.3.0
Added
- Added
CHANGELOG.mdfile to document changes in the project - Complete NatSpec documentation for all contracts
- NatSpec for
evvm/lib/(ErrorsLib, EvvmStorage, EvvmStructs, SignatureUtils) - NatSpec for
nameService/lib/(ErrorsLib, IdentityValidation, NameServiceStructs, SignatureUtils) - NatSpec for
staking/lib/(ErrorsLib, SignatureUtils, StakingStructs) - NatSpec for
treasury/lib/(ErrorsLib) - NatSpec for
library/(EvvmService, SignatureRecover, AdvancedStrings, nonces, service utils) - NatSpec for
Estimator.sol - Updated GitHub Issue Templates (bug_report.md, feature_request.md)
- Added
getEvvmIDfunction inEvvmService.solfor backend imporves
Changed
- Improved documentation clarity for community developers
- Improve testing scripts for more clarity during debugging phase
- Improved issue templates for better reporting and disclosure of AI tools used
- Improved
payMultiplefunction onEvvm.solto be more gas efficient and more legible - Replace all import interfaces on
src/contractsfiles for the respective contract
Fixed
- Missing
@devdocumentation forevvmvariable in NameService.sol - Replace hardcoded PRINCIPAL_TOKEN_ADDRESS with evvm.getPrincipalTokenAddress() in
NameService.solandStaking.sol