diff --git a/evm/development/gas-fees.mdx b/evm/development/gas-fees.mdx
index 9a5a7e95..f2f1aaa7 100644
--- a/evm/development/gas-fees.mdx
+++ b/evm/development/gas-fees.mdx
@@ -152,7 +152,7 @@ Ensure both `gasLimit` (RLP) and `maxGasAllowance` (wrapper) are set high enough
The **gas limit** is the maximum amount of gas you are willing to pay for an operation.
-The current opcode gas fees are reflective as of the **[0.22 Hedera Service release](/learn/release-notes/services#v0.22)**.
+The current opcode gas fees are reflective as of the **[0.22 Hedera Service release](/networks/release-notes/services#v0.22)**.
| Operation | Cancun Cost (Gas) | Current Hedera (Gas) |
| ------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------- |
diff --git a/evm/development/security.mdx b/evm/development/security.mdx
index 24d64927..272ef697 100644
--- a/evm/development/security.mdx
+++ b/evm/development/security.mdx
@@ -65,7 +65,7 @@ To achieve state change or value transfer, executions must adhere to the rules o
Developers are strongly encouraged to test their applications with new contracts and UX using the new security model to avoid unintended consequences.
-* The new security model has been applied to contracts created from the mainnet [0.35.2 release](/learn/release-notes/services#0.35.2-hedera-smart-contract-service-security-model-changes) and onwards.
+* The new security model has been applied to contracts created from the mainnet [0.35.2 release](/networks/release-notes/services#0.35.2-hedera-smart-contract-service-security-model-changes) and onwards.
* Existing contracts deployed before this upgrade will continue to use the previous security model for a limited time to allow for application/UX modifications.
* The previous security model will only be maintained for approximately three months. The current target is for the network to remove the previous security model and for all contracts to follow the new model by the mainnet release of July 2023.
* See a comprehensive list of the security updates made [here](#0.35.2).
diff --git a/evm/development/troubleshooting.mdx b/evm/development/troubleshooting.mdx
index d5f1e5e7..d42d35eb 100644
--- a/evm/development/troubleshooting.mdx
+++ b/evm/development/troubleshooting.mdx
@@ -40,7 +40,7 @@ Hedera supports both ECDSA (secp256k1) and ED25519. The EVM toolchain only handl
### Gas refund behavior
-Per [HIP-1249](https://hips.hedera.com/#hip-1249) (mirror node [v0.140.0 release notes](/learn/release-notes/mirror-node#v0-140-0)), unused gas is refunded in full, and only the gas you actually consumed is charged. The per-transaction limit remains 15M ([HIP-185](https://hips.hedera.com/#hip-185)). Hedera previously capped gas refunds at 20% of the limit, so setting a generous gas limit could quietly cost you. If you find guidance referencing the 20% cap, it's pre-HIP-1249 and no longer applies. See [Gas and Fees](/evm/development/gas-fees) for the full pricing model, intrinsic gas costs, and how to estimate fees.
+Per [HIP-1249](https://hips.hedera.com/#hip-1249) (mirror node [v0.140.0 release notes](/networks/release-notes/mirror-node#v0-140-0)), unused gas is refunded in full, and only the gas you actually consumed is charged. The per-transaction limit remains 15M ([HIP-185](https://hips.hedera.com/#hip-185)). Hedera previously capped gas refunds at 20% of the limit, so setting a generous gas limit could quietly cost you. If you find guidance referencing the 20% cap, it's pre-HIP-1249 and no longer applies. See [Gas and Fees](/evm/development/gas-fees) for the full pricing model, intrinsic gas costs, and how to estimate fees.
### Historical queries have a retention window
diff --git a/evm/differences/index.mdx b/evm/differences/index.mdx
index de2988c6..43d8ebb1 100644
--- a/evm/differences/index.mdx
+++ b/evm/differences/index.mdx
@@ -15,7 +15,7 @@ This guide is for:
| **Feature** | **Hedera** | **Ethereum** |
|---|:---|:---|
| Consensus Mechanism | Asynchronous Byzantine Fault Tolerance (aBFT), Proof of Stake (PoS) | Byzantine Fault Tolerance (BFT), Proof of Stake (PoS) |
-| Transaction Fees | Low and predictable [fees](/learn/networks/mainnet/fees) | Variable gas fees; can spike during network congestion |
+| Transaction Fees | Low and predictable [fees](/networks/fees) | Variable gas fees; can spike during network congestion |
| Governance Model | Governed by the Hedera Governing Council, comprising leading global organizations | Decentralized; governed by the Ethereum community |
| Native Token | HBAR | ETH |
| Token Standard | ERC-20 and ERC-721 supported; Hedera Token Service (HTS) enables native token issuance and management without smart contracts | ERC-20 and ERC-721 |
diff --git a/evm/hedera-services/system-contracts/hts.mdx b/evm/hedera-services/system-contracts/hts.mdx
index 3e634b76..faf8817d 100644
--- a/evm/hedera-services/system-contracts/hts.mdx
+++ b/evm/hedera-services/system-contracts/hts.mdx
@@ -8,11 +8,11 @@ Hedera enables the native creation of fungible and non-fungible tokens through i
Some of the key functions defined in the Hedera Token Service System Contract include:
-| Function Name | Consensus Node Release Version | HIP | Method Interface |
|---|---|---|---|
allowance | 0.26 | HIP 514 | allowance(address token, address owner, address spender) |
approve | 0.26 | HIP 514 | approve(address token, address to, uint256 tokenId) |
approveNFT | 0.28 | HIP 514 | approveNFT(address token, address to, uint256 tokenId) |
associate | 0.38 | HIP 719 | associate() |
associateToken | 0.22 | HIP 206 | associateToken(address account, address token) |
associateTokens | 0.22 | HIP 206 | associateTokens(address account, address[] memory tokens) |
burnToken | 0.32 | HIP 206 | burnToken(address token, int64 amount, int64[] memory serialNumbers) |
createFungibleToken | 0.32 | HIP 358 | createFungibleToken(HederaToken memory token, int64 initialTotalSupply, int32 decimals) |
createFungibleTokenWithCustomFees | 0.30 | HIP 358 | createFungibleTokenWithCustomFees(HederaToken memory token, int64 initialTotalSupply, int32 decimals, FixedFee[] memory fixedFees, FractionalFee[] memory fractionalFees) |
createNonFungibleToken | 0.25 | HIP 358 | createNonFungibleToken(HederaToken memory token) |
createNonFungibleTokenWithCustomFees | 0.32 | HIP 358 | createNonFungibleTokenWithCustomFees(HederaToken memory token, FixedFee[] memory fixedFees, RoyaltyFee[] memory royaltyFees) |
cryptoTransfer | Unreleased | HIP 206 | cryptoTransfer(TransferList memory transferList, TokenTransferList[] memory tokenTransfers) external returns (int64 responseCode) |
deleteToken | 0.29 | HIP 514 | deleteToken(address token) |
dissociate | 0.38 | HIP 719 | dissociate() |
dissociateToken | 0.22 | HIP 206 | dissociateToken(address account, address token) |
dissociateTokens | 0.22 | HIP 206 | dissociateTokens(address account, address[] memory tokens) |
freezeToken | 0.29 | HIP 514 | freezeToken(address token, address account) |
getApproved | 0.26 | HIP 376 | getApproved(address token, uint256 tokenId) |
getFungibleTokenInfo | 0.29 | HIP 514 | getFungibleTokenInfo(address token) |
getNonFungibleTokenInfo | 0.29 | HIP 514 | getNonFungibleTokenInfo(address token, int64 serialNumber) |
getTokenCustomFees | 0.29 | HIP 514 | getTokenCustomFees(address token) |
getTokenDefaultFreezeStatus | 0.29 | HIP 514 | getTokenDefaultFreezeStatus(address token) |
getTokenDefaultKycStatus | 0.29 | HIP 514 | getTokenDefaultKycStatus(address token) |
getTokenExpiryInfo | 0.30 | HIP 514 | getTokenExpiryInfo(address token) |
getTokenInfo | 0.29 | HIP 514 | getTokenInfo(address token) |
getTokenKey | 0.30 | HIP 514 | getTokenKey(address token, uint256 keyType) |
getTokenType | 0.30 | HIP 514 | getTokenType(address token) |
grantTokenKyc | 0.29 | HIP 514 | grantTokenKyc(address token, address account) |
isAssociated | 0.53 | HIP 719 | isAssociated() |
isApprovedForAll | 0.26 | HIP 376 | isApprovedForAll(address token, address owner, address operator) |
isFrozen | 0.29 | HIP 514 | isFrozen(address token, address account) |
isKyc | 0.29 | HIP 514 | isKyc(address token, address account) |
isToken | 0.30 | HIP 514 | isToken(address token) |
mintToken | 0.32 | HIP 206 | mintToken(address token, int64 amount, bytes[] memory metadata) |
redirectForToken | 0.30 | HIP 218 | redirectForToken(address token, bytes memory data) |
revokeTokenKyc | 0.29 | HIP 514 | revokeTokenKyc(address token, address account) |
setApprovalForAll | 0.26 | HIP 376 | setApprovalForAll(address token, address operator, bool approved) |
transferFrom | 0.26 | HIP 376 | transferFrom(address token, address from, address to, uint256 tokenId) |
transferFromNFT | 0.26 | HIP 376 | transferFromNFT(address token, address from, address to, uint256 serialNumber) |
transferNFT | 0.22 | HIP 206 | transferNFT(address token, address sender, address recipient, int64 serialNum) |
transferNFTs | 0.22 | HIP 206 | transferNFTs(address token, address[] memory sender, address[] memory receiver, int64[] memory serialNumber) |
transferToken | 0.22 | HIP 206 | transferToken(address token, address sender, address recipient, int64 amount) |
transferTokens | 0.22 | HIP 206 | transferTokens(address token, address[] memory accountId, int64[] memory amount) |
unfreezeToken | 0.29 | HIP 514 | unfreezeToken(address token, address account) |
unpauseToken | 0.29 | HIP 514 | unpauseToken(address token) |
updateTokenExpiryInfo | 0.32 | HIP 514 | updateTokenExpiryInfo(address token, Expiry expiry) |
updateTokenInfo | 0.32 | HIP 514 | updateTokenInfo(address token, HederaToken hederaToken) |
updateTokenKeys | 0.30 | HIP 514 | updateTokenKeys(address token, Expiry expiry) |
wipeTokenAccount | 0.32 | HIP 514 | wipeTokenAccount(address token, address account, int64 amount) |
wipeTokenAccountNFT | 0.29 | HIP 514 | wipeTokenAccountNFT(address token, address account, int64[] serialNumbers) |
| Function Name | Consensus Node Release Version | HIP | Method Interface |
|---|---|---|---|
allowance | 0.26 | HIP 514 | allowance(address token, address owner, address spender) |
approve | 0.26 | HIP 514 | approve(address token, address to, uint256 tokenId) |
approveNFT | 0.28 | HIP 514 | approveNFT(address token, address to, uint256 tokenId) |
associate | 0.38 | HIP 719 | associate() |
associateToken | 0.22 | HIP 206 | associateToken(address account, address token) |
associateTokens | 0.22 | HIP 206 | associateTokens(address account, address[] memory tokens) |
burnToken | 0.32 | HIP 206 | burnToken(address token, int64 amount, int64[] memory serialNumbers) |
createFungibleToken | 0.32 | HIP 358 | createFungibleToken(HederaToken memory token, int64 initialTotalSupply, int32 decimals) |
createFungibleTokenWithCustomFees | 0.30 | HIP 358 | createFungibleTokenWithCustomFees(HederaToken memory token, int64 initialTotalSupply, int32 decimals, FixedFee[] memory fixedFees, FractionalFee[] memory fractionalFees) |
createNonFungibleToken | 0.25 | HIP 358 | createNonFungibleToken(HederaToken memory token) |
createNonFungibleTokenWithCustomFees | 0.32 | HIP 358 | createNonFungibleTokenWithCustomFees(HederaToken memory token, FixedFee[] memory fixedFees, RoyaltyFee[] memory royaltyFees) |
cryptoTransfer | Unreleased | HIP 206 | cryptoTransfer(TransferList memory transferList, TokenTransferList[] memory tokenTransfers) external returns (int64 responseCode) |
deleteToken | 0.29 | HIP 514 | deleteToken(address token) |
dissociate | 0.38 | HIP 719 | dissociate() |
dissociateToken | 0.22 | HIP 206 | dissociateToken(address account, address token) |
dissociateTokens | 0.22 | HIP 206 | dissociateTokens(address account, address[] memory tokens) |
freezeToken | 0.29 | HIP 514 | freezeToken(address token, address account) |
getApproved | 0.26 | HIP 376 | getApproved(address token, uint256 tokenId) |
getFungibleTokenInfo | 0.29 | HIP 514 | getFungibleTokenInfo(address token) |
getNonFungibleTokenInfo | 0.29 | HIP 514 | getNonFungibleTokenInfo(address token, int64 serialNumber) |
getTokenCustomFees | 0.29 | HIP 514 | getTokenCustomFees(address token) |
getTokenDefaultFreezeStatus | 0.29 | HIP 514 | getTokenDefaultFreezeStatus(address token) |
getTokenDefaultKycStatus | 0.29 | HIP 514 | getTokenDefaultKycStatus(address token) |
getTokenExpiryInfo | 0.30 | HIP 514 | getTokenExpiryInfo(address token) |
getTokenInfo | 0.29 | HIP 514 | getTokenInfo(address token) |
getTokenKey | 0.30 | HIP 514 | getTokenKey(address token, uint256 keyType) |
getTokenType | 0.30 | HIP 514 | getTokenType(address token) |
grantTokenKyc | 0.29 | HIP 514 | grantTokenKyc(address token, address account) |
isAssociated | 0.53 | HIP 719 | isAssociated() |
isApprovedForAll | 0.26 | HIP 376 | isApprovedForAll(address token, address owner, address operator) |
isFrozen | 0.29 | HIP 514 | isFrozen(address token, address account) |
isKyc | 0.29 | HIP 514 | isKyc(address token, address account) |
isToken | 0.30 | HIP 514 | isToken(address token) |
mintToken | 0.32 | HIP 206 | mintToken(address token, int64 amount, bytes[] memory metadata) |
redirectForToken | 0.30 | HIP 218 | redirectForToken(address token, bytes memory data) |
revokeTokenKyc | 0.29 | HIP 514 | revokeTokenKyc(address token, address account) |
setApprovalForAll | 0.26 | HIP 376 | setApprovalForAll(address token, address operator, bool approved) |
transferFrom | 0.26 | HIP 376 | transferFrom(address token, address from, address to, uint256 tokenId) |
transferFromNFT | 0.26 | HIP 376 | transferFromNFT(address token, address from, address to, uint256 serialNumber) |
transferNFT | 0.22 | HIP 206 | transferNFT(address token, address sender, address recipient, int64 serialNum) |
transferNFTs | 0.22 | HIP 206 | transferNFTs(address token, address[] memory sender, address[] memory receiver, int64[] memory serialNumber) |
transferToken | 0.22 | HIP 206 | transferToken(address token, address sender, address recipient, int64 amount) |
transferTokens | 0.22 | HIP 206 | transferTokens(address token, address[] memory accountId, int64[] memory amount) |
unfreezeToken | 0.29 | HIP 514 | unfreezeToken(address token, address account) |
unpauseToken | 0.29 | HIP 514 | unpauseToken(address token) |
updateTokenExpiryInfo | 0.32 | HIP 514 | updateTokenExpiryInfo(address token, Expiry expiry) |
updateTokenInfo | 0.32 | HIP 514 | updateTokenInfo(address token, HederaToken hederaToken) |
updateTokenKeys | 0.30 | HIP 514 | updateTokenKeys(address token, Expiry expiry) |
wipeTokenAccount | 0.32 | HIP 514 | wipeTokenAccount(address token, address account, int64 amount) |
wipeTokenAccountNFT | 0.29 | HIP 514 | wipeTokenAccountNFT(address token, address account, int64[] serialNumbers) |
| Function Name | Consensus Node Release Version | HIP | Method Interface |
|---|---|---|---|
allowance | 0.26 | HIP 376 | allowance(address owner, address spender) |
approve | 0.26 | HIP 376 | approve(address to, uint256 tokenId) |
getApproved | 0.26 | HIP 376 | getApproved(uint256 tokenId) |
isApprovedForAll | 0.26 | HIP 376 | isApprovedForAll(address token, address owner, address operator) |
setApprovalForAll | 0.26 | HIP 376 | setApprovalForAll(address operator, bool approved) |
transferFrom | 0.26 | HIP 376 | transferFrom(address from, address to, uint256 tokenId) |
| Function Name | Consensus Node Release Version | HIP | Method Interface |
|---|---|---|---|
allowance | 0.26 | HIP 376 | allowance(address owner, address spender) |
approve | 0.26 | HIP 376 | approve(address to, uint256 tokenId) |
getApproved | 0.26 | HIP 376 | getApproved(uint256 tokenId) |
isApprovedForAll | 0.26 | HIP 376 | isApprovedForAll(address token, address owner, address operator) |
setApprovalForAll | 0.26 | HIP 376 | setApprovalForAll(address operator, bool approved) |
transferFrom | 0.26 | HIP 376 | transferFrom(address from, address to, uint256 tokenId) |
| Function Name | Function Selector | Consensus Node Release Version | HIP | Function Interface |
|---|---|---|---|---|
authorizeSchedule | 0xf0637961 | 0.57 | HIP 755 | authorizeSchedule(address) external returns (int64 responseCode) |
signSchedule | 0x358eeb03 | 0.59 | HIP 755 | signSchedule(address, bytes) external returns (int64 responseCode) |
scheduleNative | 0xca829811 | 0.59 | HIP 756 | scheduleNative(address, bytes, address) external returns (int64, address) |
getScheduledCreateFungibleTokenInfo | 0xda2d5f8f | 0.59 | HIP 756 | getScheduledCreateFungibleTokenInfo(address) external returns (int64, FungibleTokenInfo) |
getScheduledCreateNonFungibleTokenInfo | 0xd68c902c | 0.59 | HIP 756 | getScheduledCreateNonFungibleTokenInfo(address) external returns (int64, NonFungibleTokenInfo) |
scheduleCall | 0x6f5bfde8 | 0.68 | HIP 1215 | scheduleCall(address, uint256, uint256, uint64, bytes) external returns (int64, address) |
scheduleCallWithPayer | 0xe6599c18 | 0.68 | HIP 1215 | scheduleCallWithPayer(address, address, uint256, uint256, uint64, bytes) external returns (int64, address) |
executeCallOnPayerSignature | 0x105772b2 | 0.68 | HIP 1215 | executeCallOnPayerSignature(address, address, uint256, uint256, uint64, bytes) external returns (int64, address) |
deleteSchedule | 0x72d42394 | 0.68 | HIP 1215 | deleteSchedule(address) external returns (int64) |
deleteSchedule | 0xc61dea85 | 0.68 | HIP 1215 | deleteSchedule() external returns (int64) |
hasScheduleCapacity | 0xdfb4a999 | 0.68 | HIP 1215 | hasScheduleCapacity(uint256, uint256) external view returns (bool) |
| Function Name | Function Selector | Consensus Node Release Version | HIP | Function Interface |
|---|---|---|---|---|
authorizeSchedule | 0xf0637961 | 0.57 | HIP 755 | authorizeSchedule(address) external returns (int64 responseCode) |
signSchedule | 0x358eeb03 | 0.59 | HIP 755 | signSchedule(address, bytes) external returns (int64 responseCode) |
scheduleNative | 0xca829811 | 0.59 | HIP 756 | scheduleNative(address, bytes, address) external returns (int64, address) |
getScheduledCreateFungibleTokenInfo | 0xda2d5f8f | 0.59 | HIP 756 | getScheduledCreateFungibleTokenInfo(address) external returns (int64, FungibleTokenInfo) |
getScheduledCreateNonFungibleTokenInfo | 0xd68c902c | 0.59 | HIP 756 | getScheduledCreateNonFungibleTokenInfo(address) external returns (int64, NonFungibleTokenInfo) |
scheduleCall | 0x6f5bfde8 | 0.68 | HIP 1215 | scheduleCall(address, uint256, uint256, uint64, bytes) external returns (int64, address) |
scheduleCallWithPayer | 0xe6599c18 | 0.68 | HIP 1215 | scheduleCallWithPayer(address, address, uint256, uint256, uint64, bytes) external returns (int64, address) |
executeCallOnPayerSignature | 0x105772b2 | 0.68 | HIP 1215 | executeCallOnPayerSignature(address, address, uint256, uint256, uint64, bytes) external returns (int64, address) |
deleteSchedule | 0x72d42394 | 0.68 | HIP 1215 | deleteSchedule(address) external returns (int64) |
deleteSchedule | 0xc61dea85 | 0.68 | HIP 1215 | deleteSchedule() external returns (int64) |
hasScheduleCapacity | 0xdfb4a999 | 0.68 | HIP 1215 | hasScheduleCapacity(uint256, uint256) external view returns (bool) |
| Method | Type | Requirement |
|---|---|---|
setTopicId(<topicId>) | TopicId | Required |
<TopicInfo>.adminKey | Key | Optional |
<TopicInfo>.submitKey | Key | Optional |
<TopicInfo>.topicId | TopicId | Optional |
<TopicInfo>.sequenceNumber | long | Optional |
<TopicInfo>.runningHash | ByteString | Optional |
<TopicInfo>.memo | String | Optional |
<TopicInfo>.ledgerId | LedgerId | Optional |
<TopicInfo>.expirationTime | Instant | Optional |
<TopicInfo>.autoRenewAccount | AccountId | Optional |
<TopicInfo>.autoRenewPeriod | Instant | Optional |
| Method | Type | Description | Requirement |
|---|---|---|---|
setContractId(<contractId>) | ContractID | The ID of the contract to call. | Required |
setFunction(<name, params>) | String, ContractFunctionParameters | Which function to call and the parameters to pass to the function. | Required |
setGas(<gas>) | long | The maximum amount of gas to use for the call. | Required |
setPayableAmount(<amount>) | Hbar | Number of HBARs sent (the function must be payable if this is nonzero) | Optional |
| Method | Type | Description |
|---|---|---|
addPendingAirdropId(<pendingAirdropId) | List<PendingAirdropId> | Adds the ID of a pending airdrop to the transaction, indicating which specific airdrop the sender wants to cancel. This method is used to reference and cancel one or more pending airdrops by their unique identifiers. The transaction can have up to 10 entries and must no have any duplicates. |
| SDK Method | Type | Description |
|---|---|---|
setOwnerId(accountId) | AccountId | Sets the ID of the account holding/owning the tokens. |
addTokenId(<tokenId>) | TokenId | Adds a token to be rejected. |
setTokenIds(tokenIds) | List<TokenId> | Adds a list of one or more token IDs to be rejected. |
addNftId(<nftId>) | TokenId | Adds a NFT ID to be rejected. |
setNftIds(<nftIds>) | List<NftId> | Adds a list of one or more NFT IDs to be rejected. |
| Method | Type | Description |
|---|---|---|
setOwnerId(accountId) | AccountId | Sets the ID of the account holding/owning the tokens. This is the receiver account that will be rejecting the token. |
addTokenId(<tokenId>) | TokenId | Adds a token ID to be rejected and dissociated. |
setTokenIds(tokenIds) | List<TokenId> | Sets a list of one or more token IDs to be rejected and dissociated. |
addNftId(<NftId>) | NftId | Adds a NFT ID to be rejected and dissociated. |
setNftIds(<nftIds>) | List<NftId> | Sets a list of one or more NFT IDs to be rejected and dissociated. |
+ Three network environments: pick the one that matches your stage. +
+ +