tx · 12v38x2xFcnhqN5GrHNUAhUF1xqVtTcUKFv8Ck9hWsUx

3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY:  -0.01800000 Waves

2024.02.05 09:37 [4028405] smart account 3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY > SELF 0.00000000 Waves

{ "type": 13, "id": "12v38x2xFcnhqN5GrHNUAhUF1xqVtTcUKFv8Ck9hWsUx", "fee": 1800000, "feeAssetId": null, "timestamp": 1707115096735, "version": 2, "chainId": 87, "sender": "3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY", "senderPublicKey": "8bCz9o3CUTfKKYBmcfJcAwKVKxEmLhGGyULemkcJwtkB", "proofs": [ "YCYDpPr6dVaNZRS5P8khVVMvRdt6SCq1jHEj6W8H7zpPkye1fPYtLsaWbqyjvMNXyjn2WL5UgMca5ciQCJ1qXui" ], "script": "base64:BgI6CAISABIAEgASABIDCgEIEgASABIAEgMKAQgSABIAEgMKAQgSABIAEgMKAQgSABIECgIICBIECgIIASMBDXRyeUdldEludGVnZXICB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgAAAmQ4AIDC1y8AAmQ2AMCEPQAHcG9vbEJCQgEaAVdS7pNWFE1+B4zShQ/mflxXN34cn+88gh0ADXB1enpsZVN0YWtpbmcJAQdBZGRyZXNzAQEaAVeUaIz57qK5qp/W9Y68qY9nGpwG9BYpibsACWJiYlBvb2xJZAEaAVdS7pNWFE1+B4zShQ/mflxXN34cn+88gh0AB2J1cm54dG4BICRPdXlqfjM5uPsM/4SpcVxeyi3eM6DEXWn56kQR7ExUAAl3aGlybHBvb2wBIFnjjdzCtSO6ShTcxNCvFAnmZOYEviUGCyZO5VBtl1nHAAZwdXp6bGUBIPEa/iX+9pk49GkqxN/hEtZHssbKDro3Ca93bR+OouVjAARyb21lASCLX5QBhMNlwSQ0jv8b/HCRMUhqyTHqqMuT8/mfNEQIzwAEc3VyZgEgktH0SuIRASv0fureIY49xfvJ8n3Oh7LtUhnwOk4kWPUADHB1enpsZVN0YWtlZAkBDXRyeUdldEludGVnZXICBQ1wdXp6bGVTdGFraW5nCQCsAgIJAKUIAQUEdGhpcwIHX3N0YWtlZAAMcHV6emxlSW5Qb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUJYmJiUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQZwdXp6bGUCCF9iYWxhbmNlAAxwcm9qZWN0U3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQliYmJQb29sSWQJAKwCAgkApQgBBQR0aGlzAgxfaW5kZXhTdGFrZWQACnRvdGFsU3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQliYmJQb29sSWQCF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50AAthc3NldFdlaWdodAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFCWJiYlBvb2xJZAkArAICCQCsAgICB3N0YXRpY18JANgEAQUGcHV6emxlAgdfd2VpZ2h0AA1CQkJscEluUHV6emxlCQBrAwkAaAIJAGkCBQxwdXp6bGVJblBvb2wFC2Fzc2V0V2VpZ2h0AJBOBQxwcm9qZWN0U3Rha2UFCnRvdGFsU3Rha2UAFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQCFEFkZHJlc3NlcyByZWdpc3RlcmVkAAlhZGRyZXNzZXMJALMCAgkBDHRyeUdldFN0cmluZwIFBHRoaXMFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQAAQAQa2V5QnVybnh0bkFtb3VudAIWQlVSTi1YVE4gdG90YWwgcmV3YXJkcwANa2V5Um9tZUFtb3VudAISUk9NRSB0b3RhbCByZXdhcmRzAA9rZXlQdXp6bGVBbW91bnQCFFBVWlpMRSB0b3RhbCByZXdhcmRzAA5rZXlXYXZlc0Ftb3VudAITV0FWRVMgdG90YWwgcmV3YXJkcwASa2V5V2hpcmxwb29sQW1vdW50AhdXSElSTFBPT0wgdG90YWwgcmV3YXJkcwAQa2V5VG90YWxORlRwb3dlcgIPVG90YWwgTkZUIHBvd2VyABNrZXlUb3RhbFB1enpsZVZhbHVlAhJUb3RhbCBwdXp6bGUgdmFsdWUAE2tleVRvdGFsQnVybnh0blBhaWQCE1RvdGFsIEJVUk4tWFROIHBhaWQAFWtleVRvdGFsV2hpcmxwb29sUGFpZAIUVG90YWwgV0hJUkxQT09MIHBhaWQAEGtleVRvdGFsUm9tZVBhaWQCD1RvdGFsIFJPTUUgcGFpZAARa2V5VG90YWxXYXZlc1BhaWQCEFRvdGFsIFdBVkVTIHBhaWQAEmtleVRvdGFsUHV6emxlUGFpZAIRVG90YWwgUFVaWkxFIHBhaWQAB1dGU2xpc3QJAMwIAgIsR25weTVuVmFqUFAzWFFRVnhySGJvTUFzWHRqbnlXQXh5Yk1EZEtyYnI4c0QJAMwIAgIsQlQ5UTRtUWRRUW1laTJyNVlOTUJNYXNaQlFqN215TmFpejZRSGJhNWNQWFMJAMwIAgIsQk12a3lGdFBWbUZhdHBGUjlRVkZLUjVNWVRjWlZUWTJWVXdGWjI1dnJBQWMJAMwIAgIsNzdScXU4VExqQmRNdER1WGQ5bzVmVVNHbzY0elFlNUZDY2FvNUw4SHQ5ajgJAMwIAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCATUJAMwIAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCATYJAMwIAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCATcJAMwIAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCATgJAMwIAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCATkJAMwIAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCAjEwBQNuaWwAB0JCQmxpc3QJAMwIAgIsOXBDeG9HdEQxOEdlSDlnQ2VtenFyakhNTWpmeUJRRGZzclJBdXhTUmFnTWMJAMwIAgIsN0RnRmdDa0JqVkRjNVA5Wmd3c1ZMOVNpVGk3a1hKdVM0YVJWZ2I3WkhXM2sJAMwIAgIsNzZiVHZFOHR0SHZzdU4xRnVINEtjOFFVVzRrTDRtOGMxY2pmc1h5MkdmYlYJAMwIAgIsNFpyZjRINXRpRmNRTDhlUW1uQTJ3SjFYV1BFQkg2aDFHMk1lZlpEWW1jQ0IJAMwIAgIsMkR0QzRuRm54ejVVTTZtYmpQd01WWnBRV1pGVXF4czUyb1pyQmVOUms5QW8JAMwIAgIsRGpaR01BRmZvUVdrTVczUzVGVHNRTjNqb25jWnQ2QnNtaG5FSzNnZ0x4bU4JAMwIAgIsQm5lYVpYRDZvdkRKY1Y1cmdmcjhoc0haYU1Rc0pROERINmE1Z1RuR0NwQmMJAMwIAgIsNEVLZmd6RmtkNVVHS3JqbmFKVjN3N2FyZ1cxWW1GNGhxNTR4V1FGekFYYjkJAMwIAgIsOGhHRGtXS2l1MmlnRHBXVDNIcHI0bWNoREQ2eHdKOWhHbTJoMmpuVXZUcXoJAMwIAgIsRTNablNlanBYTDFYcjZWRzRRb0xoOHhvZDlOTWdwUGU0NzNyOVFrMkhpYkwFA25pbAANU1VSRmJvYXJkTGlzdAkAzAgCAixEekxTZ0VhQkI0VU5iUENaZWtQU3piUTg1S29rTUI3ZDFLUlJtelVQdTVocwkAzAgCAitXbVd6c2JiM1BOdnpKNHc0RmI3M0tjb05HTFh1bWdZWmFnVjIyekVpWDF3CQDMCAICLDdScnhiZ2F5VWtzUEhyQTc5OXBLdUNyNjFyZVQ4bkVOZHFDa2dWSFBnYU4yCQDMCAICLEZtRExmenNwYlZKZUtoS2R1TERVYmEySG9WZFJyS3Rzd0RLTVUzZTlxanRQCQDMCAICLDJUZko0eGJFUWQyeDRodE1FYW1aUmhuTHBUN3RVd1lWalkzNkpSOE5NMmFoCQDMCAICLDJyVnhOTVh1dnVnNzRUb3JMUVpHQzJFUkhqQWJKblZVZ05YUTFrSm10bkFlCQDMCAICLDl5Yjl5R0ptNmd6Vm96Qkh1UVZIQmRBbnpmY3QzTjliUnBkampOVW5yemNDCQDMCAICK3MxU2ZHVnNoZjJqS0NBOUt2dktLdlV1Szh1dHAzTmUzZWU4THA2S0tMUncJAMwIAgIsM0UzeWI3VHZESzc2MmRuMTFkbVJMd2FwZ2hhZWZRVUV5dW5WZFhTTnA0dEIJAMwIAgIsRkg3NVR2QXB5VnRmZDlYNWExQXIxOU5zOUROSnZ6cHpMRkU1cGpoMXdpNGgJAMwIAgIsRWdxa2JEeVdSUGdWTlZxdEVFdFJTeldjR0QzM29yVm9FMmJ6WWRBZGllUVMJAMwIAgIsRHNLeUpwSkNaY0Z2OWpTblFiUVZHNEp4M1dTUDFLdGZIaEFLVGtTS3JWQmoJAMwIAgIsQWVzUHI1VUZEZ1k1alpYWVVaOEprYll0Sm92VmRESGJ5MTVTQ2tzRWhtSksJAMwIAgIsQVZzZmRxdzJtNWFVTnhhMUhZOWVtTG1DTEJmVkFHVHhWdTRlZjN4RURLQzgJAMwIAgIsNWpkdlNTWTJLN2g4VWlVQ1hVZ0s5VDd6Zk1yeXF3Mml0S1A4QnlzZFhERGsJAMwIAgIsQTR2b0taZXM4TVZEQVh5UWpLa2I2YmRFY3FNYnZCNHB0emJwcVlxdmVHNW4JAMwIAgIsMzRvWkthV0hwU0pyWnZHTGRZdTVXRzhXV1hnN3J3RjJISHg4SzE1R2ZVQ1EJAMwIAgIsNzdNY0NIa21OclJNNERqcWtTTTlCOFlqdUpjS3RuNjdqUWdlMXB6WnJROFQJAMwIAgIsN05FRkJudkdHTWZZZEJuaE1MTnB1VmdTMjJMcGNnWENaZ0hmbThESG1taUEJAMwIAgIsR29GOXlva3hIZ1BOb3hvV2dqamRtR2VXaGNMWUFyU3N4cWZmUnRmWUd0ZnMFA25pbBIBaQEKaW52b2tlQ2xJMQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAJjbAkA/AcEBQR0aGlzAhFjbGFpbUludmVzdFB1enpsZQUDbmlsBQNuaWwDCQAAAgUCY2wFAmNsBAJpMQkA/AcEBQR0aGlzAghpbnZva2VyMQUDbmlsBQNuaWwDCQAAAgUCaTEFAmkxBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERY2xhaW1JbnZlc3RQdXp6bGUAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQRcm9tZUJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwUEcm9tZQMJAAACBRFyb21lQmFsYW5jZUJlZm9yZQURcm9tZUJhbGFuY2VCZWZvcmUEEmNsYWltUHV6emxlU3Rha2luZwkA/AcEBQ1wdXp6bGVTdGFraW5nAgtjbGFpbVJld2FyZAUDbmlsBQNuaWwDCQAAAgUSY2xhaW1QdXp6bGVTdGFraW5nBRJjbGFpbVB1enpsZVN0YWtpbmcED3Bvb2xPbmVUb2tlbkludgkA/AcECQEHQWRkcmVzcwEBGgFX/SXDvU5hlEHvul4SY4/FOW9JtYg69eltAiFnZW5lcmF0ZUluZGV4V2l0aE9uZVRva2VuQW5kU3Rha2UJAMwIAgkA2AQBBQdwb29sQkJCBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBnB1enpsZQkA8AcCBQR0aGlzBQZwdXp6bGUFA25pbAMJAAACBQ9wb29sT25lVG9rZW5JbnYFD3Bvb2xPbmVUb2tlbkludgQQcm9tZUJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzBQRyb21lCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdl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bnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCBF9CQkIJAGgCBQhzaGFyZUJCQgAKCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlUb3RhbE5GVHBvd2VyCQBkAgkBDXRyeUdldEludGVnZXICBQR0aGlzBRBrZXlUb3RhbE5GVHBvd2VyCQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKBQNuaWwBaQEEZGF0YQAJAMwIAgkBDEludGVnZXJFbnRyeQICDnB1enpsZSBiYWxhbmNlCQDwBwIFBHRoaXMFBnB1enpsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgINcHV6emxlIHN0YWtlZAUMcHV6emxlU3Rha2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1wdXp6bGUgQkJCIExQBQ1CQkJscEluUHV6emxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlUb3RhbFB1enpsZVZhbHVlCQBkAgkAZAIJAPAHAgUEdGhpcwUGcHV6emxlBQxwdXp6bGVTdGFrZWQFDUJCQmxwSW5QdXp6bGUFA25pbAFpAQhpbnZva2VyMgADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAF0CQD8BwQFBHRoaXMCDnRyYWNrVG90YWxQYWlkBQNuaWwFA25pbAMJAAACBQF0BQF0BARsaXN0CQC8CQIFCWFkZHJlc3NlcwIBLAoBAXICBWFjY3VtB2FkZHJlc3MJAPwHBAUEdGhpcwIRZGlzdHJpYnV0ZVJld2FyZHMJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwEB2ludm9rZXIKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUAwkAAAIFB2ludm9rZXIFB2ludm9rZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ50cmFja1RvdGFsUGFpZAAEDWFtb3VudEJ1cm54dG4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5QnVybnh0bkFtb3VudAQPYW1vdW50V2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEmtleVdoaXJscG9vbEFtb3VudAQLYW1vdW50V2F2ZXMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUOa2V5V2F2ZXNBbW91bnQECmFtb3VudFJvbWUJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUNa2V5Um9tZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxCdXJueHRuUGFpZAkAZAIFDWFtb3VudEJ1cm54dG4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUTa2V5VG90YWxCdXJueHRuUGFpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa2V5VG90YWxXaGlybHBvb2xQYWlkCQBkAgUPYW1vdW50V2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFFWtleVRvdGFsV2hpcmxwb29sUGFpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5VG90YWxXYXZlc1BhaWQJAGQCBQthbW91bnRXYXZlcwkBDXRyeUdldEludGVnZXICBQR0aGlzBRFrZXlUb3RhbFdhdmVzUGFpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5VG90YWxSb21lUGFpZAkAZAIFCmFtb3VudFJvbWUJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5VG90YWxSb21lUGFpZAUDbmlsAWkBEWRpc3RyaWJ1dGVSZXdhcmRzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgoBCGZvbGRGdW5jAgNhY2MDV0ZTCQBkAgUDYWNjCQDwBwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MJANkEAQUDV0ZTBAhzaGFyZVdGUwoAAiRsBQdXRlNsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmb2xkRnVuYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgoBCWZvbGRGdW5jQgIDYWNjA0JCQgkAZAIFA2FjYwkA8AcCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzCQDZBAEFA0JCQgQIc2hhcmVCQkIKAAIkbAUHQkJCbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZm9sZEZ1bmNCAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCgEJZm9sZEZ1bmNDAgNhY2MJU1VSRmJvYXJkCQBkAgUDYWNjCQDwBwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MJANkEAQUJU1VSRmJvYXJkBA9hbW91bnRTVVJGYm9hcmQKAAIkbAUNU1VSRmJvYXJkTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZm9sZEZ1bmNDAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEAmJzCQD8BwQFBHRoaXMCCGJ1cm5TdXJmBQNuaWwFA25pbAMJAAACBQJicwUCYnMEDWFtb3VudEJ1cm54dG4JAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEGtleUJ1cm54dG5BbW91bnQJAGQCBQhzaGFyZVdGUwkAaAIFCHNoYXJlQkJCAAoJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5VG90YWxORlRwb3dlcgQPYW1vdW50V2hpcmxwb29sCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlXaGlybHBvb2xBbW91bnQJAGQCBQhzaGFyZVdGUwkAaAIFCHNoYXJlQkJCAAoJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5VG90YWxORlRwb3dlcgQLYW1vdW50V2F2ZXMJAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFDmtleVdhdmVzQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEGtleVRvdGFsTkZUcG93ZXIECmFtb3VudFJvbWUJAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFDWtleVJvbWVBbW91bnQJAGQCBQhzaGFyZVdGUwkAaAIFCHNoYXJlQkJCAAoJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5VG90YWxORlRwb3dlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQ1hbW91bnRCdXJueHRuBQdidXJueHRuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFD2Ftb3VudFdoaXJscG9vbAUJd2hpcmxwb29sCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFC2Ftb3VudFdhdmVzBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFCmFtb3VudFJvbWUFBHJvbWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwkAaAIFD2Ftb3VudFNVUkZib2FyZAUCZDYFBHN1cmYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhidXJuU3VyZgAJAMwIAgkBBEJ1cm4CBQRzdXJmBQJkNgkAzAgCCQEMSW50ZWdlckVudHJ5AgIRU1VSRiB0b3RhbCBidXJuZWQJAGQCCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCEVNVUkYgdG90YWwgYnVybmVkBQJkNgUDbmlsAWkBCHJlZ2lzdGVyAAMJAQhjb250YWlucwIJAQx0cnlHZXRTdHJpbmcCBQR0aGlzBRZrZXlBZGRyZXNzZXNSZWdpc3RlcmVkCQClCAEIBQFpBmNhbGxlcgkAAgECEmFscmVhZHkgcmVnaXN0ZXJlZAMJAAACCQCQAwEJALwJAgUJYWRkcmVzc2VzAgEsAB4JAAIBAgttYXggcmVhY2hlZAkAzAgCCQELU3RyaW5nRW50cnkCBRZrZXlBZGRyZXNzZXNSZWdpc3RlcmVkCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwIFBHRoaXMFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQJAKUIAQgFAWkGY2FsbGVyAgEsBQNuaWwBaQEQcmVnaXN0ZXJNYW51YWxseQEHYWRkcmVzcwMJAQhjb250YWlucwIJAQx0cnlHZXRTdHJpbmcCBQR0aGlzBRZrZXlBZGRyZXNzZXNSZWdpc3RlcmVkBQdhZGRyZXNzCQACAQISYWxyZWFkeSByZWdpc3RlcmVkAwkAAAIJAJADAQkAvAkCBQlhZGRyZXNzZXMCASwAKAkAAgECC21heCByZWFjaGVkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQELU3RyaW5nRW50cnkCBRZrZXlBZGRyZXNzZXNSZWdpc3RlcmVkCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwIFBHRoaXMFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQFB2FkZHJlc3MCASwFA25pbAFpAQ5jbGFpbUJ5QW55Ym9keQADCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIAHgCgCwUGaGVpZ2h0CQACAQkArAICAhZXYWl0IHRpbGwgYmxvY2toZWlnaHQ6CQCkAwEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAB4AoAsEE3B1enpsZUJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwUGcHV6emxlAwkAAAIFE3B1enpsZUJhbGFuY2VCZWZvcmUFE3B1enpsZUJhbGFuY2VCZWZvcmUEEXJvbWVCYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMFBHJvbWUDCQAAAgURcm9tZUJhbGFuY2VCZWZvcmUFEXJvbWVCYWxhbmNlQmVmb3JlBBJjbGFpbVB1enpsZVN0YWtpbmcJAPwHBAUNcHV6emxlU3Rha2luZwILY2xhaW1SZXdhcmQFA25pbAUDbmlsAwkAAAIFEmNsYWltUHV6emxlU3Rha2luZwUSY2xhaW1QdXp6bGVTdGFraW5nBAhjbGFpbUludgkA/AcECQEHQWRkcmVzcwEFB3Bvb2xCQkICEWNsYWltSW5kZXhSZXdhcmRzBQNuaWwFA25pbAMJAAACBQhjbGFpbUludgUIY2xhaW1JbnYEEnB1enpsZUJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzBQZwdXp6bGUEEHJvbWVCYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwUEcm9tZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5QnVybnh0bkFtb3VudAkA8AcCBQR0aGlzBQdidXJueHRuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlSb21lQW1vdW50CQBlAgUQcm9tZUJhbGFuY2VBZnRlcgURcm9tZUJhbGFuY2VCZWZvcmUJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tleVB1enpsZUFtb3VudAkAZQIFEnB1enpsZUJhbGFuY2VBZnRlcgUTcHV6emxlQmFsYW5jZUJlZm9yZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa2V5V2F2ZXNBbW91bnQDCQBmAgkAZQIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQJkOAAACQBlAggJAO8HAQUEdGhpcwlhdmFpbGFibGUFAmQ4AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtleVdoaXJscG9vbEFtb3VudAkA8AcCBQR0aGlzBQl3aGlybHBvb2wFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBpbnZva2VyQnlBbnlib2R5AAMJAGYCCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAeAKALBQZoZWlnaHQJAAIBCQCsAgICFldhaXQgdGlsbCBibG9ja2hlaWdodDoJAKQDAQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIAHgCg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bmRleAkBBXZhbHVlAQkAzwgCBQRsaXN0BQdhZGRyZXNzBA5saXN0TWludXNOb05GVAkA0QgCBQRsaXN0BQpub05GVGluZGV4BA1taW51c05vTkZUc3RyCQCsAgIJALkJAgUObGlzdE1pbnVzTm9ORlQCASwCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUWa2V5QWRkcmVzc2VzUmVnaXN0ZXJlZAUNbWludXNOb05GVHN0cgUDbmlsBA1hbW91bnRCdXJueHRuCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBRBrZXlCdXJueHRuQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEGtleVRvdGFsTkZUcG93ZXIED2Ftb3VudFdoaXJscG9vbAkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5V2hpcmxwb29sQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEGtleVRvdGFsTkZUcG93ZXIEC2Ftb3VudFdhdmVzCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBQ5rZXlXYXZlc0Ftb3VudAkAZAIFCHNoYXJlV0ZTCQBoAgUIc2hhcmVCQkIACgkBDXRyeUdldEludGVnZXICBQR0aGlzBRBrZXlUb3RhbE5GVHBvd2VyBAphbW91bnRSb21lCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBQ1rZXlSb21lQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEGtleVRvdGFsTkZUcG93ZXIEDGFtb3VudFB1enpsZQkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUPa2V5UHV6emxlQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEGtleVRvdGFsTkZUcG93ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwUNYW1vdW50QnVybnh0bgUHYnVybnh0bgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxCdXJueHRuUGFpZAkAZAIFDWFtb3VudEJ1cm54dG4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUTa2V5VG90YWxCdXJueHRuUGFpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQ9hbW91bnRXaGlybHBvb2wFCXdoaXJscG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa2V5VG90YWxXaGlybHBvb2xQYWlkCQBkAgUPYW1vdW50V2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFFWtleVRvdGFsV2hpcmxwb29sUGFpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQthbW91bnRXYXZlcwUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5VG90YWxXYXZlc1BhaWQJAGQCBQthbW91bnRXYXZlcwkBDXRyeUdldEludGVnZXICBQR0aGlzBRFrZXlUb3RhbFdhdmVzUGFpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQphbW91bnRSb21lBQRyb21lCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlUb3RhbFJvbWVQYWlkCQBkAgUKYW1vdW50Um9tZQkBDXRyeUdldEludGVnZXICBQR0aGlzBRBrZXlUb3RhbFJvbWVQYWlkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFDGFtb3VudFB1enpsZQUGcHV6emxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrZXlUb3RhbFB1enpsZVBhaWQJAGQCBQxhbW91bnRQdXp6bGUJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5VG90YWxQdXp6bGVQYWlkBQNuaWwBaQELZGVsZXRlRW50cnkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQELRGVsZXRlRW50cnkBBRZrZXlBZGRyZXNzZXNSZWdpc3RlcmVkBQNuaWwBaQEIYWRkV0ZTaWQCCVdGU251bWJlcgpXRlNhc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCVdGU251bWJlcgIABQpXRlNhc3NldElkBQNuaWwBaQESY2hhbmdlSW50ZWdlckVudHJ5AglrZXlTdHJpbmcHaW50ZWdlcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVN0cmluZwUHaW50ZWdlcgUDbmlsABnnHj0=", "height": 4028405, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EeykPg8iGn6QMwLzzpjdbSwsV6AHvq1wKU1BJCrqAVut Next: 8qV4X2qPnTxNnrmsjvjLBC8xrALLvFZofN2L9KRqWx7s Diff:
OldNewDifferences
316316
317317 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
318318 }
319- let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
320- let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
321- let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
322- let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
323-[ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), ScriptTransfer(addressFromStringValue(address), amountRome, rome), Burn(surf, d6), ScriptTransfer(addressFromStringValue(address), (amountSURFboard * d6), surf)]
319+ let bs = invoke(this, "burnSurf", nil, nil)
320+ if ((bs == bs))
321+ then {
322+ let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
323+ let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
324+ let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
325+ let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
326+[ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), ScriptTransfer(addressFromStringValue(address), amountRome, rome), ScriptTransfer(addressFromStringValue(address), (amountSURFboard * d6), surf)]
327+ }
328+ else throw("Strict value is not equal to itself.")
324329 }
330+
331+
332+
333+@Callable(i)
334+func burnSurf () = [Burn(surf, d6), IntegerEntry("SURF total burned", (tryGetInteger(this, "SURF total burned") + d6))]
325335
326336
327337
482492
483493
484494 @Callable(i)
485-func addSURFboardId (SURFboardNumber,SURFboardAssetId) = if ((i.caller != this))
495+func changeIntegerEntry (keyString,integer) = if ((i.caller != this))
486496 then throw("access only by project owner")
487- else [StringEntry((SURFboardNumber + ""), SURFboardAssetId)]
497+ else [IntegerEntry(keyString, integer)]
488498
489499
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetInteger (address,key) = match getInteger(address, key) {
55 case b: Int =>
66 b
77 case _ =>
88 0
99 }
1010
1111
1212 func tryGetString (address,key) = match getString(address, key) {
1313 case b: String =>
1414 b
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 let d8 = 100000000
2121
2222 let d6 = 1000000
2323
2424 let poolBBB = base58'3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk'
2525
2626 let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS')
2727
2828 let bbbPoolId = base58'3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk'
2929
3030 let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns'
3131
3232 let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi'
3333
3434 let puzzle = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS'
3535
3636 let rome = base58'AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ'
3737
3838 let surf = base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL'
3939
4040 let puzzleStaked = tryGetInteger(puzzleStaking, (toString(this) + "_staked"))
4141
4242 let puzzleInPool = tryGetInteger(Address(bbbPoolId), (("global_" + toBase58String(puzzle)) + "_balance"))
4343
4444 let projectStake = tryGetInteger(Address(bbbPoolId), (toString(this) + "_indexStaked"))
4545
4646 let totalStake = tryGetInteger(Address(bbbPoolId), "global_poolToken_amount")
4747
4848 let assetWeight = tryGetInteger(Address(bbbPoolId), (("static_" + toBase58String(puzzle)) + "_weight"))
4949
5050 let BBBlpInPuzzle = fraction(((puzzleInPool / assetWeight) * 10000), projectStake, totalStake)
5151
5252 let keyAddressesRegistered = "Addresses registered"
5353
5454 let addresses = dropRight(tryGetString(this, keyAddressesRegistered), 1)
5555
5656 let keyBurnxtnAmount = "BURN-XTN total rewards"
5757
5858 let keyRomeAmount = "ROME total rewards"
5959
6060 let keyPuzzleAmount = "PUZZLE total rewards"
6161
6262 let keyWavesAmount = "WAVES total rewards"
6363
6464 let keyWhirlpoolAmount = "WHIRLPOOL total rewards"
6565
6666 let keyTotalNFTpower = "Total NFT power"
6767
6868 let keyTotalPuzzleValue = "Total puzzle value"
6969
7070 let keyTotalBurnxtnPaid = "Total BURN-XTN paid"
7171
7272 let keyTotalWhirlpoolPaid = "Total WHIRLPOOL paid"
7373
7474 let keyTotalRomePaid = "Total ROME paid"
7575
7676 let keyTotalWavesPaid = "Total WAVES paid"
7777
7878 let keyTotalPuzzlePaid = "Total PUZZLE paid"
7979
8080 let WFSlist = ["Gnpy5nVajPP3XQQVxrHboMAsXtjnyWAxybMDdKrbr8sD", "BT9Q4mQdQQmei2r5YNMBMasZBQj7myNaiz6QHba5cPXS", "BMvkyFtPVmFatpFR9QVFKR5MYTcZVTY2VUwFZ25vrAAc", "77Rqu8TLjBdMtDuXd9o5fUSGo64zQe5FCcao5L8Ht9j8", tryGetString(this, "5"), tryGetString(this, "6"), tryGetString(this, "7"), tryGetString(this, "8"), tryGetString(this, "9"), tryGetString(this, "10")]
8181
8282 let BBBlist = ["9pCxoGtD18GeH9gCemzqrjHMMjfyBQDfsrRAuxSRagMc", "7DgFgCkBjVDc5P9ZgwsVL9SiTi7kXJuS4aRVgb7ZHW3k", "76bTvE8ttHvsuN1FuH4Kc8QUW4kL4m8c1cjfsXy2GfbV", "4Zrf4H5tiFcQL8eQmnA2wJ1XWPEBH6h1G2MefZDYmcCB", "2DtC4nFnxz5UM6mbjPwMVZpQWZFUqxs52oZrBeNRk9Ao", "DjZGMAFfoQWkMW3S5FTsQN3joncZt6BsmhnEK3ggLxmN", "BneaZXD6ovDJcV5rgfr8hsHZaMQsJQ8DH6a5gTnGCpBc", "4EKfgzFkd5UGKrjnaJV3w7argW1YmF4hq54xWQFzAXb9", "8hGDkWKiu2igDpWT3Hpr4mchDD6xwJ9hGm2h2jnUvTqz", "E3ZnSejpXL1Xr6VG4QoLh8xod9NMgpPe473r9Qk2HibL"]
8383
8484 let SURFboardList = ["DzLSgEaBB4UNbPCZekPSzbQ85KokMB7d1KRRmzUPu5hs", "WmWzsbb3PNvzJ4w4Fb73KcoNGLXumgYZagV22zEiX1w", "7RrxbgayUksPHrA799pKuCr61reT8nENdqCkgVHPgaN2", "FmDLfzspbVJeKhKduLDUba2HoVdRrKtswDKMU3e9qjtP", "2TfJ4xbEQd2x4htMEamZRhnLpT7tUwYVjY36JR8NM2ah", "2rVxNMXuvug74TorLQZGC2ERHjAbJnVUgNXQ1kJmtnAe", "9yb9yGJm6gzVozBHuQVHBdAnzfct3N9bRpdjjNUnrzcC", "s1SfGVshf2jKCA9KvvKKvUuK8utp3Ne3ee8Lp6KKLRw", "3E3yb7TvDK762dn11dmRLwapghaefQUEyunVdXSNp4tB", "FH75TvApyVtfd9X5a1Ar19Ns9DNJvzpzLFE5pjh1wi4h", "EgqkbDyWRPgVNVqtEEtRSzWcGD33orVoE2bzYdAdieQS", "DsKyJpJCZcFv9jSnQbQVG4Jx3WSP1KtfHhAKTkSKrVBj", "AesPr5UFDgY5jZXYUZ8JkbYtJovVdDHby15SCksEhmJK", "AVsfdqw2m5aUNxa1HY9emLmCLBfVAGTxVu4ef3xEDKC8", "5jdvSSY2K7h8UiUCXUgK9T7zfMryqw2itKP8BysdXDDk", "A4voKZes8MVDAXyQjKkb6bdEcqMbvB4ptzbpqYqveG5n", "34oZKaWHpSJrZvGLdYu5WG8WWXg7rwF2HHx8K15GfUCQ", "77McCHkmNrRM4DjqkSM9B8YjuJcKtn67jQge1pzZrQ8T", "7NEFBnvGGMfYdBnhMLNpuVgS22LpcgXCZgHfm8DHmmiA", "GoF9yokxHgPNoxoWgjjdmGeWhcLYArSsxqffRtfYGtfs"]
8585
8686 @Callable(i)
8787 func invokeClI1 () = if ((i.caller != this))
8888 then throw("access only by project owner")
8989 else {
9090 let cl = invoke(this, "claimInvestPuzzle", nil, nil)
9191 if ((cl == cl))
9292 then {
9393 let i1 = invoke(this, "invoker1", nil, nil)
9494 if ((i1 == i1))
9595 then nil
9696 else throw("Strict value is not equal to itself.")
9797 }
9898 else throw("Strict value is not equal to itself.")
9999 }
100100
101101
102102
103103 @Callable(i)
104104 func claimInvestPuzzle () = if ((i.caller != this))
105105 then throw("access only by project owner")
106106 else {
107107 let romeBalanceBefore = assetBalance(this, rome)
108108 if ((romeBalanceBefore == romeBalanceBefore))
109109 then {
110110 let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil)
111111 if ((claimPuzzleStaking == claimPuzzleStaking))
112112 then {
113113 let poolOneTokenInv = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(poolBBB)], [AttachedPayment(puzzle, assetBalance(this, puzzle))])
114114 if ((poolOneTokenInv == poolOneTokenInv))
115115 then {
116116 let romeBalanceAfter = assetBalance(this, rome)
117117 [IntegerEntry("Activated blockheight", height), IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (romeBalanceAfter - romeBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0))
118118 then (wavesBalance(this).available - d8)
119119 else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))]
120120 }
121121 else throw("Strict value is not equal to itself.")
122122 }
123123 else throw("Strict value is not equal to itself.")
124124 }
125125 else throw("Strict value is not equal to itself.")
126126 }
127127
128128
129129
130130 @Callable(i)
131131 func invoker1 () = {
132132 let reset = invoke(this, "resetCount", nil, nil)
133133 if ((reset == reset))
134134 then {
135135 let list = split_4C(addresses, ",")
136136 func r (accum,address) = invoke(this, "countNFTpower", [address], nil)
137137
138138 let invoker = {
139139 let $l = list
140140 let $s = size($l)
141141 let $acc0 = nil
142142 func $f0_1 ($a,$i) = if (($i >= $s))
143143 then $a
144144 else r($a, $l[$i])
145145
146146 func $f0_2 ($a,$i) = if (($i >= $s))
147147 then $a
148148 else throw("List size exceeds 30")
149149
150150 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
151151 }
152152 if ((invoker == invoker))
153153 then {
154154 let p = invoke(this, "data", nil, nil)
155155 if ((p == p))
156156 then [IntegerEntry("WFS puzzle value", fraction(fraction(tryGetInteger(this, keyTotalPuzzleValue), 1, tryGetInteger(this, keyTotalNFTpower)), 10, 9)), IntegerEntry("BBB puzzle value", fraction(fraction(tryGetInteger(this, keyTotalPuzzleValue), 10, tryGetInteger(this, keyTotalNFTpower)), 10, 9))]
157157 else throw("Strict value is not equal to itself.")
158158 }
159159 else throw("Strict value is not equal to itself.")
160160 }
161161 else throw("Strict value is not equal to itself.")
162162 }
163163
164164
165165
166166 @Callable(i)
167167 func resetCount () = [IntegerEntry(keyTotalNFTpower, 0)]
168168
169169
170170
171171 @Callable(i)
172172 func countNFTpower (address) = {
173173 func foldFunc (acc,WFS) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(WFS)))
174174
175175 let shareWFS = {
176176 let $l = WFSlist
177177 let $s = size($l)
178178 let $acc0 = 0
179179 func $f0_1 ($a,$i) = if (($i >= $s))
180180 then $a
181181 else foldFunc($a, $l[$i])
182182
183183 func $f0_2 ($a,$i) = if (($i >= $s))
184184 then $a
185185 else throw("List size exceeds 10")
186186
187187 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
188188 }
189189 func foldFuncB (acc,BBB) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(BBB)))
190190
191191 let shareBBB = {
192192 let $l = BBBlist
193193 let $s = size($l)
194194 let $acc0 = 0
195195 func $f1_1 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else foldFuncB($a, $l[$i])
198198
199199 func $f1_2 ($a,$i) = if (($i >= $s))
200200 then $a
201201 else throw("List size exceeds 10")
202202
203203 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
204204 }
205205 if (((shareWFS + shareBBB) == 0))
206206 then {
207207 let list = split_4C(addresses, ",")
208208 let noNFTindex = value(indexOf(list, address))
209209 let listMinusNoNFT = removeByIndex(list, noNFTindex)
210210 let minusNoNFTstr = (makeString(listMinusNoNFT, ",") + ",")
211211 [StringEntry(keyAddressesRegistered, minusNoNFTstr)]
212212 }
213213 else [IntegerEntry((address + "_WFS"), shareWFS), IntegerEntry((address + "_BBB"), (shareBBB * 10)), IntegerEntry(keyTotalNFTpower, (tryGetInteger(this, keyTotalNFTpower) + (shareWFS + (shareBBB * 10))))]
214214 }
215215
216216
217217
218218 @Callable(i)
219219 func data () = [IntegerEntry("puzzle balance", assetBalance(this, puzzle)), IntegerEntry("puzzle staked", puzzleStaked), IntegerEntry("puzzle BBB LP", BBBlpInPuzzle), IntegerEntry(keyTotalPuzzleValue, ((assetBalance(this, puzzle) + puzzleStaked) + BBBlpInPuzzle))]
220220
221221
222222
223223 @Callable(i)
224224 func invoker2 () = if ((i.caller != this))
225225 then throw("access only by project owner")
226226 else {
227227 let t = invoke(this, "trackTotalPaid", nil, nil)
228228 if ((t == t))
229229 then {
230230 let list = split_4C(addresses, ",")
231231 func r (accum,address) = invoke(this, "distributeRewards", [address], nil)
232232
233233 let invoker = {
234234 let $l = list
235235 let $s = size($l)
236236 let $acc0 = nil
237237 func $f0_1 ($a,$i) = if (($i >= $s))
238238 then $a
239239 else r($a, $l[$i])
240240
241241 func $f0_2 ($a,$i) = if (($i >= $s))
242242 then $a
243243 else throw("List size exceeds 20")
244244
245245 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
246246 }
247247 if ((invoker == invoker))
248248 then nil
249249 else throw("Strict value is not equal to itself.")
250250 }
251251 else throw("Strict value is not equal to itself.")
252252 }
253253
254254
255255
256256 @Callable(i)
257257 func trackTotalPaid () = {
258258 let amountBurnxtn = tryGetInteger(this, keyBurnxtnAmount)
259259 let amountWhirlpool = tryGetInteger(this, keyWhirlpoolAmount)
260260 let amountWaves = tryGetInteger(this, keyWavesAmount)
261261 let amountRome = tryGetInteger(this, keyRomeAmount)
262262 [IntegerEntry(keyTotalBurnxtnPaid, (amountBurnxtn + tryGetInteger(this, keyTotalBurnxtnPaid))), IntegerEntry(keyTotalWhirlpoolPaid, (amountWhirlpool + tryGetInteger(this, keyTotalWhirlpoolPaid))), IntegerEntry(keyTotalWavesPaid, (amountWaves + tryGetInteger(this, keyTotalWavesPaid))), IntegerEntry(keyTotalRomePaid, (amountRome + tryGetInteger(this, keyTotalRomePaid)))]
263263 }
264264
265265
266266
267267 @Callable(i)
268268 func distributeRewards (address) = if ((i.caller != this))
269269 then throw("access only by project owner")
270270 else {
271271 func foldFunc (acc,WFS) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(WFS)))
272272
273273 let shareWFS = {
274274 let $l = WFSlist
275275 let $s = size($l)
276276 let $acc0 = 0
277277 func $f0_1 ($a,$i) = if (($i >= $s))
278278 then $a
279279 else foldFunc($a, $l[$i])
280280
281281 func $f0_2 ($a,$i) = if (($i >= $s))
282282 then $a
283283 else throw("List size exceeds 10")
284284
285285 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
286286 }
287287 func foldFuncB (acc,BBB) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(BBB)))
288288
289289 let shareBBB = {
290290 let $l = BBBlist
291291 let $s = size($l)
292292 let $acc0 = 0
293293 func $f1_1 ($a,$i) = if (($i >= $s))
294294 then $a
295295 else foldFuncB($a, $l[$i])
296296
297297 func $f1_2 ($a,$i) = if (($i >= $s))
298298 then $a
299299 else throw("List size exceeds 10")
300300
301301 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
302302 }
303303 func foldFuncC (acc,SURFboard) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(SURFboard)))
304304
305305 let amountSURFboard = {
306306 let $l = SURFboardList
307307 let $s = size($l)
308308 let $acc0 = 0
309309 func $f2_1 ($a,$i) = if (($i >= $s))
310310 then $a
311311 else foldFuncC($a, $l[$i])
312312
313313 func $f2_2 ($a,$i) = if (($i >= $s))
314314 then $a
315315 else throw("List size exceeds 20")
316316
317317 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
318318 }
319- let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
320- let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
321- let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
322- let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
323-[ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), ScriptTransfer(addressFromStringValue(address), amountRome, rome), Burn(surf, d6), ScriptTransfer(addressFromStringValue(address), (amountSURFboard * d6), surf)]
319+ let bs = invoke(this, "burnSurf", nil, nil)
320+ if ((bs == bs))
321+ then {
322+ let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
323+ let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
324+ let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
325+ let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
326+[ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), ScriptTransfer(addressFromStringValue(address), amountRome, rome), ScriptTransfer(addressFromStringValue(address), (amountSURFboard * d6), surf)]
327+ }
328+ else throw("Strict value is not equal to itself.")
324329 }
330+
331+
332+
333+@Callable(i)
334+func burnSurf () = [Burn(surf, d6), IntegerEntry("SURF total burned", (tryGetInteger(this, "SURF total burned") + d6))]
325335
326336
327337
328338 @Callable(i)
329339 func register () = if (contains(tryGetString(this, keyAddressesRegistered), toString(i.caller)))
330340 then throw("already registered")
331341 else if ((size(split_4C(addresses, ",")) == 30))
332342 then throw("max reached")
333343 else [StringEntry(keyAddressesRegistered, ((tryGetString(this, keyAddressesRegistered) + toString(i.caller)) + ","))]
334344
335345
336346
337347 @Callable(i)
338348 func registerManually (address) = if (contains(tryGetString(this, keyAddressesRegistered), address))
339349 then throw("already registered")
340350 else if ((size(split_4C(addresses, ",")) == 40))
341351 then throw("max reached")
342352 else if ((i.caller != this))
343353 then throw("access only by project owner")
344354 else [StringEntry(keyAddressesRegistered, ((tryGetString(this, keyAddressesRegistered) + address) + ","))]
345355
346356
347357
348358 @Callable(i)
349359 func claimByAnybody () = if (((getIntegerValue(this, "Activated blockheight") + (30 * 1440)) > height))
350360 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (30 * 1440)))))
351361 else {
352362 let puzzleBalanceBefore = assetBalance(this, puzzle)
353363 if ((puzzleBalanceBefore == puzzleBalanceBefore))
354364 then {
355365 let romeBalanceBefore = assetBalance(this, rome)
356366 if ((romeBalanceBefore == romeBalanceBefore))
357367 then {
358368 let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil)
359369 if ((claimPuzzleStaking == claimPuzzleStaking))
360370 then {
361371 let claimInv = invoke(Address(poolBBB), "claimIndexRewards", nil, nil)
362372 if ((claimInv == claimInv))
363373 then {
364374 let puzzleBalanceAfter = assetBalance(this, puzzle)
365375 let romeBalanceAfter = assetBalance(this, rome)
366376 [IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (romeBalanceAfter - romeBalanceBefore)), IntegerEntry(keyPuzzleAmount, (puzzleBalanceAfter - puzzleBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0))
367377 then (wavesBalance(this).available - d8)
368378 else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))]
369379 }
370380 else throw("Strict value is not equal to itself.")
371381 }
372382 else throw("Strict value is not equal to itself.")
373383 }
374384 else throw("Strict value is not equal to itself.")
375385 }
376386 else throw("Strict value is not equal to itself.")
377387 }
378388
379389
380390
381391 @Callable(i)
382392 func invokerByAnybody () = if (((getIntegerValue(this, "Activated blockheight") + (30 * 1440)) > height))
383393 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (30 * 1440)))))
384394 else {
385395 let reset = invoke(this, "distributeRewardsByAnybody", nil, nil)
386396 if ((reset == reset))
387397 then {
388398 let list = split_4C(addresses, ",")
389399 func r (accum,address) = invoke(this, "countNFTpower", [address], nil)
390400
391401 let invoker = {
392402 let $l = list
393403 let $s = size($l)
394404 let $acc0 = nil
395405 func $f0_1 ($a,$i) = if (($i >= $s))
396406 then $a
397407 else r($a, $l[$i])
398408
399409 func $f0_2 ($a,$i) = if (($i >= $s))
400410 then $a
401411 else throw("List size exceeds 40")
402412
403413 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
404414 }
405415 if ((invoker == invoker))
406416 then nil
407417 else throw("Strict value is not equal to itself.")
408418 }
409419 else throw("Strict value is not equal to itself.")
410420 }
411421
412422
413423
414424 @Callable(i)
415425 func distributeRewardsByAnybody (address) = if ((i.caller != this))
416426 then throw("access only by project owner")
417427 else {
418428 func foldFunc (acc,WFS) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(WFS)))
419429
420430 let shareWFS = {
421431 let $l = WFSlist
422432 let $s = size($l)
423433 let $acc0 = 0
424434 func $f0_1 ($a,$i) = if (($i >= $s))
425435 then $a
426436 else foldFunc($a, $l[$i])
427437
428438 func $f0_2 ($a,$i) = if (($i >= $s))
429439 then $a
430440 else throw("List size exceeds 10")
431441
432442 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
433443 }
434444 func foldFuncB (acc,BBB) = (acc + assetBalance(addressFromStringValue(address), fromBase58String(BBB)))
435445
436446 let shareBBB = {
437447 let $l = BBBlist
438448 let $s = size($l)
439449 let $acc0 = 0
440450 func $f1_1 ($a,$i) = if (($i >= $s))
441451 then $a
442452 else foldFuncB($a, $l[$i])
443453
444454 func $f1_2 ($a,$i) = if (($i >= $s))
445455 then $a
446456 else throw("List size exceeds 10")
447457
448458 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
449459 }
450460 if (((shareWFS + shareBBB) == 0))
451461 then {
452462 let list = split_4C(addresses, ",")
453463 let noNFTindex = value(indexOf(list, address))
454464 let listMinusNoNFT = removeByIndex(list, noNFTindex)
455465 let minusNoNFTstr = (makeString(listMinusNoNFT, ",") + ",")
456466 [StringEntry(keyAddressesRegistered, minusNoNFTstr)]
457467 }
458468 else {
459469 let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
460470 let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
461471 let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
462472 let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
463473 let amountPuzzle = fraction(tryGetInteger(this, keyPuzzleAmount), (shareWFS + (shareBBB * 10)), tryGetInteger(this, keyTotalNFTpower))
464474 [ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), IntegerEntry(keyTotalBurnxtnPaid, (amountBurnxtn + tryGetInteger(this, keyTotalBurnxtnPaid))), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), IntegerEntry(keyTotalWhirlpoolPaid, (amountWhirlpool + tryGetInteger(this, keyTotalWhirlpoolPaid))), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), IntegerEntry(keyTotalWavesPaid, (amountWaves + tryGetInteger(this, keyTotalWavesPaid))), ScriptTransfer(addressFromStringValue(address), amountRome, rome), IntegerEntry(keyTotalRomePaid, (amountRome + tryGetInteger(this, keyTotalRomePaid))), ScriptTransfer(addressFromStringValue(address), amountPuzzle, puzzle), IntegerEntry(keyTotalPuzzlePaid, (amountPuzzle + tryGetInteger(this, keyTotalPuzzlePaid)))]
465475 }
466476 }
467477
468478
469479
470480 @Callable(i)
471481 func deleteEntry () = if ((i.caller != this))
472482 then throw("access only by project owner")
473483 else [DeleteEntry(keyAddressesRegistered)]
474484
475485
476486
477487 @Callable(i)
478488 func addWFSid (WFSnumber,WFSassetId) = if ((i.caller != this))
479489 then throw("access only by project owner")
480490 else [StringEntry((WFSnumber + ""), WFSassetId)]
481491
482492
483493
484494 @Callable(i)
485-func addSURFboardId (SURFboardNumber,SURFboardAssetId) = if ((i.caller != this))
495+func changeIntegerEntry (keyString,integer) = if ((i.caller != this))
486496 then throw("access only by project owner")
487- else [StringEntry((SURFboardNumber + ""), SURFboardAssetId)]
497+ else [IntegerEntry(keyString, integer)]
488498
489499

github/deemru/w8io/873ac7e 
65.24 ms