diff --git a/smart-contract/.eslintrc.cjs b/smart-contract/.eslintrc.cjs index 2159ae3a..2c6040c2 100644 --- a/smart-contract/.eslintrc.cjs +++ b/smart-contract/.eslintrc.cjs @@ -1,3 +1,11 @@ module.exports = { extends: ['@massalabs'], + overrides: [ + { + files: ['src/**/*.ts'], + rules: { + 'no-console': 'off', + }, + }, + ], }; diff --git a/smart-contract/assembly/__tests__/deweb-interface/helpers/delete-file.ts b/smart-contract/assembly/__tests__/deweb-interface/helpers/delete-file.ts index 5ca878cc..973dac64 100644 --- a/smart-contract/assembly/__tests__/deweb-interface/helpers/delete-file.ts +++ b/smart-contract/assembly/__tests__/deweb-interface/helpers/delete-file.ts @@ -85,4 +85,3 @@ export function _assertHasNoChunk(locationHash: StaticArray): void { export function _assertHasNoCoins(): void { assert(balance() === 0, 'Balance should be zero'); } - diff --git a/smart-contract/assembly/contracts/deweb-interface.ts b/smart-contract/assembly/contracts/deweb-interface.ts index 71f39908..d8e912e1 100644 --- a/smart-contract/assembly/contracts/deweb-interface.ts +++ b/smart-contract/assembly/contracts/deweb-interface.ts @@ -230,7 +230,10 @@ export function setMetadataFile(_binaryArgs: StaticArray): void { .next>() .expect('Invalid hashLocation'); - assert(hashLocation.length == 32, 'Invalid filpath sha256 hash. should be 32 bytes'); + assert( + hashLocation.length == 32, + 'Invalid filpath sha256 hash. should be 32 bytes', + ); const metadata = args .nextSerializableObjectArray() @@ -262,7 +265,10 @@ export function removeMetadataFile(_binaryArgs: StaticArray): void { .next>() .expect('Invalid hashLocation'); - assert(hashLocation.length == 32, 'Invalid filpath sha256 hash. should be 32 bytes'); + assert( + hashLocation.length == 32, + 'Invalid filpath sha256 hash. should be 32 bytes', + ); const metadata = args.next().expect('Invalid key'); @@ -311,12 +317,11 @@ export function receiveCoins(): void { export function upgradeSC(args: StaticArray): void { _onlyOwner(); setBytecode(args); - + // Send the freed coins back to the caller transferCoins(Context.caller(), balance()); } - /* -------------------------------------------------------------------------- */ /* PURGE SC */ /* -------------------------------------------------------------------------- */ @@ -324,10 +329,9 @@ export function upgradeSC(args: StaticArray): void { /** * Deletes all the contract storage and bytecode. * Sends back the freed coins to the caller. - * @param args - Ignored. * @throws If the caller is not the owner. */ -export function purge(args: StaticArray): void { +export function purge(_: StaticArray): void { _onlyOwner(); // Delete all datastore entries diff --git a/smart-contract/package.json b/smart-contract/package.json index d5644693..70386b5d 100644 --- a/smart-contract/package.json +++ b/smart-contract/package.json @@ -9,6 +9,7 @@ "build": "massa-as-compile", "clean": "rimraf build", "deploy": "npm run build && tsx src/deploy.ts", + "upgrade": "npm run build && tsx src/upgrade.ts", "prettier": "prettier '**/src/**/*.ts' --check && as-prettier --check assembly", "prettier:fix": "prettier '**/src/**/*.ts' --write && as-prettier --write assembly", "lint": "eslint .", diff --git a/smart-contract/src/e2e/helpers/serializable/Metadata.ts b/smart-contract/src/e2e/helpers/serializable/Metadata.ts index 60cc7ebd..5ed373d7 100644 --- a/smart-contract/src/e2e/helpers/serializable/Metadata.ts +++ b/smart-contract/src/e2e/helpers/serializable/Metadata.ts @@ -1,16 +1,10 @@ import { Args, DeserializedResult, Serializable } from '@massalabs/massa-web3'; export class Metadata implements Serializable { - constructor( - public key: string = '', - public value: string = '', - ) {} + constructor(public key: string = '', public value: string = '') {} serialize(): Uint8Array { - return new Args() - .addString(this.key) - .addString(this.value) - .serialize(); + return new Args().addString(this.key).addString(this.value).serialize(); } deserialize(data: Uint8Array, offset: number): DeserializedResult { diff --git a/smart-contract/src/upgrade.ts b/smart-contract/src/upgrade.ts new file mode 100644 index 00000000..7484d685 --- /dev/null +++ b/smart-contract/src/upgrade.ts @@ -0,0 +1,25 @@ +import { + Account, + Mas, + SmartContract, + Web3Provider, +} from '@massalabs/massa-web3'; +import { getByteCode } from './utils'; + +const CONTRACT_ADDR = 'AS1BsB34Hq7VGpGG26cudgFr15nshSeJfAkkf6WGY8JcXbG6kzUg'; + +const account = await Account.fromEnv(); +const provider = Web3Provider.mainnet(account); +const contract = new SmartContract(provider, CONTRACT_ADDR); + +const byteCode = getByteCode('build', 'deweb-interface.wasm'); + +const operation = await contract.call('upgradeSC', byteCode, { + coins: Mas.fromString('3'), + fee: Mas.fromString('0.1'), +}); + +const events = await operation.getSpeculativeEvents(); +for (const event of events) { + console.log('upgradeSC Events:', event.data); +}