2023-02-17 12:56:13 +01:00
import QtQuick 2.15
2023-04-11 10:09:01 +02:00
import utils 1.0
2022-08-23 10:46:37 +02:00
QtObject {
2022-11-25 18:35:30 +01:00
id: root
2023-03-09 11:03:17 +01:00
property var communityTokensModuleInst: communityTokensModule ? ? null
2023-02-22 18:10:46 +01:00
// Network selection properties:
property var layer1Networks: networksModule . layer1
property var layer2Networks: networksModule . layer2
property var enabledNetworks: networksModule . enabled
2023-03-09 12:12:49 +01:00
property var allNetworks: networksModule . all
2023-03-07 12:32:45 +01:00
2023-10-23 13:36:33 +02:00
// set by asyncGetOwnerTokenDetails
readonly property var ownerTokenDetails: {
JSON . parse ( communityTokensModuleInst . ownerTokenDetails )
}
2023-09-01 12:27:44 +03:00
signal deployFeeUpdated ( var ethCurrency , var fiatCurrency , int error , string responseId )
signal selfDestructFeeUpdated ( var ethCurrency , var fiatCurrency , int error , string responseId )
2023-06-06 17:32:53 +02:00
signal airdropFeeUpdated ( var airdropFees )
2023-09-01 12:27:44 +03:00
signal burnFeeUpdated ( var ethCurrency , var fiatCurrency , int error , string responseId )
2023-10-23 13:32:50 +02:00
signal setSignerFeeUpdated ( var ethCurrency , var fiatCurrency , int error , string responseId )
2023-05-05 13:03:59 +02:00
2023-04-13 10:09:06 +02:00
signal deploymentStateChanged ( string communityId , int status , string url )
2023-07-11 15:23:00 +02:00
signal ownerTokenDeploymentStateChanged ( string communityId , int status , string url )
2023-05-05 13:03:59 +02:00
signal remoteDestructStateChanged ( string communityId , string tokenName , int status , string url )
2023-06-06 14:54:35 +02:00
signal burnStateChanged ( string communityId , string tokenName , int status , string url )
signal airdropStateChanged ( string communityId , string tokenName , string chainName , int status , string url )
2023-07-11 15:23:00 +02:00
signal ownerTokenDeploymentStarted ( string communityId , string url )
2023-10-23 13:32:50 +02:00
signal setSignerStateChanged ( string communityId , string communityName , int status , string url )
2023-10-23 13:36:33 +02:00
signal ownershipLost ( string communityId , string communityName )
2023-11-03 16:55:04 +01:00
signal communityOwnershipDeclined ( string communityName )
signal sendOwnerTokenStateChanged ( string tokenName , int status , string url )
signal ownerTokenReceived ( string communityId , string communityName )
2024-01-19 12:40:41 +01:00
signal communityTokenReceived ( string name , string image ,
string communityId , string communityName ,
string balance , int chainId ,
string txHash , bool isFirst ,
2024-01-24 12:49:46 +01:00
int tokenType , string walletAccountName ,
string symbol )
2023-05-05 13:03:59 +02:00
2023-03-23 14:17:07 +01:00
// Minting tokens:
2023-06-01 12:38:56 +02:00
function deployCollectible ( communityId , collectibleItem )
2023-08-10 14:23:59 +02:00
{
if ( collectibleItem . key !== "" )
2023-07-25 16:11:10 +02:00
deleteToken ( communityId , collectibleItem . key )
2023-08-10 14:23:59 +02:00
2023-06-01 12:38:56 +02:00
const jsonArtworkFile = Utils . getImageAndCropInfoJson ( collectibleItem . artworkSource , collectibleItem . artworkCropRect )
communityTokensModuleInst . deployCollectible ( communityId , collectibleItem . accountAddress , collectibleItem . name ,
collectibleItem . symbol , collectibleItem . description , collectibleItem . supply ,
collectibleItem . infiniteSupply , collectibleItem . transferable , collectibleItem . remotelyDestruct ,
2023-07-03 12:55:23 +02:00
collectibleItem . chainId , jsonArtworkFile )
2023-03-23 14:17:07 +01:00
}
2023-06-01 12:38:56 +02:00
function deployAsset ( communityId , assetItem )
2023-05-25 12:46:53 +02:00
{
2023-08-10 14:23:59 +02:00
if ( assetItem . key !== "" )
2023-07-25 16:11:10 +02:00
deleteToken ( communityId , assetItem . key )
2023-08-10 14:23:59 +02:00
2023-06-01 12:38:56 +02:00
const jsonArtworkFile = Utils . getImageAndCropInfoJson ( assetItem . artworkSource , assetItem . artworkCropRect )
2023-06-14 09:50:54 +02:00
communityTokensModuleInst . deployAssets ( communityId , assetItem . accountAddress , assetItem . name ,
assetItem . symbol , assetItem . description , assetItem . supply ,
2023-07-03 12:55:23 +02:00
assetItem . infiniteSupply , assetItem . decimals , assetItem . chainId , jsonArtworkFile )
2023-05-25 12:46:53 +02:00
}
2023-07-18 14:39:38 +02:00
function deployOwnerToken ( communityId , ownerToken , tMasterToken )
{
2023-07-11 15:23:00 +02:00
const jsonArtworkFile = Utils . getImageAndCropInfoJson ( ownerToken . artworkSource , ownerToken . artworkCropRect )
communityTokensModuleInst . deployOwnerToken ( communityId , ownerToken . accountAddress , ownerToken . name , ownerToken . symbol , ownerToken . description ,
tMasterToken . name , tMasterToken . symbol , tMasterToken . description , ownerToken . chainId , jsonArtworkFile )
2023-07-18 14:39:38 +02:00
}
2023-05-30 17:18:45 +02:00
function deleteToken ( communityId , contractUniqueKey ) {
2023-07-24 15:09:45 +02:00
let parts = contractUniqueKey . split ( "_" ) ;
communityTokensModuleInst . removeCommunityToken ( communityId , parts [ 0 ] , parts [ 1 ] )
2023-05-30 17:18:45 +02:00
}
2023-10-23 13:36:33 +02:00
function updateSmartContract ( communityId , chainId , contractAddress , accountAddress ) {
communityTokensModuleInst . setSigner ( communityId , chainId , contractAddress , accountAddress )
2023-10-23 13:32:50 +02:00
}
2023-11-03 16:55:04 +01:00
function ownershipDeclined ( communityId , communityName ) {
2023-10-23 13:36:33 +02:00
communityTokensModuleInst . declineOwnership ( communityId )
2023-11-03 16:55:04 +01:00
root . communityOwnershipDeclined ( communityName )
}
2023-09-28 12:09:47 +02:00
2023-04-03 13:29:36 +02:00
readonly property Connections connections: Connections {
2023-06-06 17:32:53 +02:00
target: communityTokensModuleInst
2023-09-01 12:27:44 +03:00
function onDeployFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId ) {
root . deployFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId )
2023-06-06 17:32:53 +02:00
}
2023-09-01 12:27:44 +03:00
function onSelfDestructFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId ) {
root . selfDestructFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId )
2023-06-06 17:32:53 +02:00
}
function onAirdropFeesUpdated ( jsonFees ) {
root . airdropFeeUpdated ( JSON . parse ( jsonFees ) )
}
2023-09-01 12:27:44 +03:00
function onBurnFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId ) {
root . burnFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId )
}
2023-10-23 13:32:50 +02:00
function onSetSignerFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId ) {
2023-10-23 13:36:33 +02:00
root . setSignerFeeUpdated ( ethCurrency , fiatCurrency , errorCode , responseId )
2023-10-23 13:32:50 +02:00
}
2023-06-06 17:32:53 +02:00
function onDeploymentStateChanged ( communityId , status , url ) {
root . deploymentStateChanged ( communityId , status , url )
}
2023-07-11 15:23:00 +02:00
function onOwnerTokenDeploymentStateChanged ( communityId , status , url ) {
root . ownerTokenDeploymentStateChanged ( communityId , status , url )
}
function onOwnerTokenDeploymentStarted ( communityId , url ) {
root . ownerTokenDeploymentStarted ( communityId , url )
}
2023-06-06 17:32:53 +02:00
function onRemoteDestructStateChanged ( communityId , tokenName , status , url ) {
root . remoteDestructStateChanged ( communityId , tokenName , status , url )
}
2023-06-06 14:54:35 +02:00
function onAirdropStateChanged ( communityId , tokenName , chainName , status , url ) {
root . airdropStateChanged ( communityId , tokenName , chainName , status , url )
}
function onBurnStateChanged ( communityId , tokenName , status , url ) {
root . burnStateChanged ( communityId , tokenName , status , url )
}
2023-10-23 13:32:50 +02:00
function onOwnerTokenReceived ( communityId , communityName , chainId , communityAddress ) {
2023-11-03 16:55:04 +01:00
root . ownerTokenReceived ( communityId , communityName )
2023-10-23 13:32:50 +02:00
}
2024-01-24 12:49:46 +01:00
function onCommunityTokenReceived ( name , image , communityId , communityName , communityColor /*Unused, can be removed*/ , balance , chainId , txHash /*, isFirst, tokenType, walletAccountName, symbol*/ ) {
2024-01-19 12:40:41 +01:00
// TODO BACKEND: #13250
// ** `isFirst` property will be true if it's the first time the user receives a community asset and a community collectible
// ** `tokenType` property will determine if the received minted token is an ERC20 or an ERC720
// ** `walletAccountName` property will provide the wallet account name where the token was received
2024-01-24 12:49:46 +01:00
// ** `symbol` property will provide the token symbol
2024-01-19 12:40:41 +01:00
var isFirst = false
var tokenType = Constants . TokenType . ERC20
var walletAccountName = "Status account"
2024-01-24 12:49:46 +01:00
var symbol = "NON"
root . communityTokenReceived ( name , image , communityId , communityName , balance , chainId , txHash , isFirst , tokenType , walletAccountName , symbol )
2024-01-04 13:22:12 +01:00
}
2023-10-23 13:32:50 +02:00
function onSetSignerStateChanged ( communityId , communityName , status , url ) {
2023-10-23 13:36:33 +02:00
root . setSignerStateChanged ( communityId , communityName , status , url )
}
function onOwnershipLost ( communityId , communityName ) {
root . ownershipLost ( communityId , communityName )
2023-10-23 13:32:50 +02:00
}
2023-11-03 16:55:04 +01:00
function onSendOwnerTokenStateChanged ( tokenName , status , url ) {
2023-11-24 09:48:50 +01:00
root . sendOwnerTokenStateChanged ( tokenName , status , url )
2023-11-03 16:55:04 +01:00
}
2023-09-01 12:27:44 +03:00
}
2023-06-06 14:54:35 +02:00
2023-11-03 16:55:04 +01:00
// Burn:
2023-09-01 12:27:44 +03:00
function computeBurnFee ( tokenKey , amount , accountAddress , requestId ) {
console . assert ( typeof amount === "string" )
communityTokensModuleInst . computeBurnFee ( tokenKey , amount , accountAddress , requestId )
}
function computeAirdropFee ( communityId , contractKeysAndAmounts , addresses , feeAccountAddress , requestId ) {
communityTokensModuleInst . computeAirdropFee (
communityId , JSON . stringify ( contractKeysAndAmounts ) ,
JSON . stringify ( addresses ) , feeAccountAddress , requestId )
2023-04-03 13:29:36 +02:00
}
2023-08-30 09:20:28 +02:00
function computeDeployFee ( communityId , chainId , accountAddress , tokenType , isOwnerDeployment , requestId ) {
communityTokensModuleInst . computeDeployFee ( communityId , chainId , accountAddress , tokenType , isOwnerDeployment , requestId )
2023-03-23 14:17:07 +01:00
}
2023-10-23 13:36:33 +02:00
function computeSetSignerFee ( chainId , contractAddress , accountAddress , requestId ) {
communityTokensModuleInst . computeSetSignerFee ( chainId , contractAddress , accountAddress , requestId )
2023-10-23 13:32:50 +02:00
}
2023-08-17 15:58:04 +02:00
/ * *
* walletsAndAmounts - array of following structure is expected:
* [
* {
* walletAddress: string
* amount: int
* }
* ]
* /
2023-09-01 12:27:44 +03:00
function computeSelfDestructFee ( walletsAndAmounts , tokenKey , accountAddress , requestId ) {
communityTokensModuleInst . computeSelfDestructFee ( JSON . stringify ( walletsAndAmounts ) , tokenKey , accountAddress , requestId )
2023-03-31 14:52:51 +02:00
}
2023-08-17 15:58:04 +02:00
function remoteSelfDestructCollectibles ( communityId , walletsAndAmounts , tokenKey , accountAddress ) {
2023-08-17 09:51:08 +02:00
communityTokensModuleInst . selfDestructCollectibles ( communityId , JSON . stringify ( walletsAndAmounts ) , tokenKey , accountAddress )
2023-03-31 14:52:51 +02:00
}
2023-09-21 15:02:18 +02:00
function remotelyDestructAndBan ( communityId , contactId , tokenKey , accountAddress , deleteMessages ) {
console . warn ( "remotelyDestructAndBan, not implemented yet!" )
}
function remotelyDestructAndKick ( communityId , contactId , tokenKey , accountAddress ) {
console . warn ( "remotelyDestructAndKick, not implemented yet!" )
}
2023-08-07 15:31:07 +02:00
function burnToken ( communityId , tokenKey , burnAmount , accountAddress ) {
2023-08-10 14:23:59 +02:00
console . assert ( typeof burnAmount === "string" )
2023-08-17 09:51:08 +02:00
communityTokensModuleInst . burnTokens ( communityId , tokenKey , burnAmount , accountAddress )
2023-05-18 17:01:48 +02:00
}
2023-03-13 17:32:14 +01:00
// Airdrop tokens:
2023-07-25 16:14:42 +02:00
function airdrop ( communityId , airdropTokens , addresses , feeAccountAddress ) {
2023-08-17 09:51:08 +02:00
communityTokensModuleInst . airdropTokens ( communityId , JSON . stringify ( airdropTokens ) , JSON . stringify ( addresses ) , feeAccountAddress )
2023-03-13 17:32:14 +01:00
}
2023-10-23 13:36:33 +02:00
function asyncGetOwnerTokenDetails ( communityId ) {
communityTokensModuleInst . asyncGetOwnerTokenDetails ( communityId )
}
2022-08-23 10:46:37 +02:00
}