From 5c97b99fa7fb4dd40ac95be10c8007ef3c2925d2 Mon Sep 17 00:00:00 2001 From: Peterjah Date: Tue, 10 Dec 2024 11:52:44 +0100 Subject: [PATCH] check contract lock in transfertFrom --- smart-contract/assembly/contracts/main.ts | 56 +++++++---------------- smart-contract/package-lock.json | 6 +-- 2 files changed, 19 insertions(+), 43 deletions(-) diff --git a/smart-contract/assembly/contracts/main.ts b/smart-contract/assembly/contracts/main.ts index 18b4259..ac94d90 100644 --- a/smart-contract/assembly/contracts/main.ts +++ b/smart-contract/assembly/contracts/main.ts @@ -1,12 +1,8 @@ -// The entry file of your WebAssembly module. import { Address, Context, Storage, balance, - call, - functionExists, - isDeployingContract, setBytecode, transferCoins, } from '@massalabs/massa-as-sdk'; @@ -20,32 +16,25 @@ import { } from '@massalabs/as-types'; import { _update, - _constructor, _ownerOf, + TOTAL_SUPPLY_KEY, } from '@massalabs/sc-standards/assembly/contracts/MRC721/enumerable/MRC721Enumerable-internals'; - import { - _setOwner, + transferFrom as _transferFrom, + mrc721Constructor, +} from '@massalabs/sc-standards/assembly/contracts/MRC721/enumerable/MRC721Enumerable'; +import { _onlyOwner, _isOwner, } from '@massalabs/sc-standards/assembly/contracts/utils/ownership-internal'; import { u256 } from 'as-bignum/assembly'; -/** - * This function is meant to be called only one time: when the contract is deployed. - * - * @param _binaryArgs - Arguments serialized with Args (none) - */ -export function constructor(_binaryArgs: StaticArray): void { - // This line is important. It ensures that this function can't be called in the future. - // If you remove this check, someone could call your constructor function and reset your smart contract. - assert(isDeployingContract()); - _constructor('MassaNameService', 'MNS'); +export function constructor(_: StaticArray): void { + mrc721Constructor('MassaNameService', 'MNS'); Storage.set(COUNTER_KEY, u256ToBytes(u256.Zero)); - _setOwner(Context.caller().toString()); Storage.set(buildLockedKey(), u256ToBytes(u256.Zero)); - return; + Storage.set(TOTAL_SUPPLY_KEY, u256ToBytes(u256.Zero)); } // DNS RELATED FUNCTIONS @@ -138,11 +127,6 @@ function buildLockedKey(): StaticArray { return DOMAIN_SEPARATOR_KEY.concat(LOCKED_KEY_PREFIX); } -function addressIsEOA(address: Address): bool { - const stringAddress = address.toString(); - return stringAddress.startsWith('AU'); -} - /** * Lock the contract */ @@ -230,13 +214,7 @@ export function dnsAlloc(binaryArgs: StaticArray): StaticArray { ); if (transferredCoins > totalCost) { const amountToSend = transferredCoins - totalCost; - if (addressIsEOA(Context.caller())) { - transferCoins(Context.caller(), amountToSend); - } else { - if (functionExists(Context.caller(), 'receiveCoins')) { - call(Context.caller(), 'receiveCoins', new Args(), amountToSend); - } - } + transferCoins(Context.caller(), amountToSend); } return u256ToBytes(counter); } @@ -290,14 +268,7 @@ export function dnsFree(binaryArgs: StaticArray): void { calculateCreationCost(domain.length) / 2 + storageCostsRefunded + Context.transferredCoins(); - if (addressIsEOA(Context.caller())) { - transferCoins(Context.caller(), refundTotal); - } else { - if (functionExists(Context.caller(), 'receiveCoins')) { - call(Context.caller(), 'receiveCoins', new Args(), refundTotal); - } - } - return; + transferCoins(Context.caller(), refundTotal); } /** @@ -451,6 +422,11 @@ export function ownerOf(binaryArgs: StaticArray): StaticArray { return stringToBytes(owner); } +export function transferFrom(binaryArgs: StaticArray): void { + assert(!Storage.has(buildLockedKey()), 'Contract is locked'); + _transferFrom(binaryArgs); +} + export { setOwner, ownerAddress, @@ -461,8 +437,8 @@ export { setApprovalForAll, getApproved, approve, - transferFrom, balanceOf, symbol, name, + totalSupply, } from '@massalabs/sc-standards/assembly/contracts/MRC721/enumerable/MRC721Enumerable'; diff --git a/smart-contract/package-lock.json b/smart-contract/package-lock.json index d563753..3cf6a2b 100644 --- a/smart-contract/package-lock.json +++ b/smart-contract/package-lock.json @@ -1042,9 +1042,9 @@ } }, "node_modules/@massalabs/sc-standards": { - "version": "1.2.3-dev.20241206115935", - "resolved": "https://registry.npmjs.org/@massalabs/sc-standards/-/sc-standards-1.2.3-dev.20241206115935.tgz", - "integrity": "sha512-Bh31uadb+zGwNXxhbuYx+gXWPgTfD1D/uUetiImJh3Y6KOpIKCOXRll4Z9sZGrjW+LNwcdfMeWcR8Tw/Vk8VLA==", + "version": "1.2.3-dev.20241209143606", + "resolved": "https://registry.npmjs.org/@massalabs/sc-standards/-/sc-standards-1.2.3-dev.20241209143606.tgz", + "integrity": "sha512-g0F4GSGWsKSqTMQMS6f0rA76nfVRxQYDsPQep1PHm7hc2otD5v0zNcxMQOjYBxiq03CxYPligzqvcD+uSQy48g==", "dev": true, "license": "ISC", "dependencies": {