An advanced Ethereum/EVM mobile wallet
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
alpha-wallet-ios/TokenScriptFiles/ERC721-TokenScript.tsml

346 lines
46 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE token [
<!ENTITY style SYSTEM "layouts/shared.css">
<!ENTITY item-view-sent.en SYSTEM "layouts/item-view-sent.en.js">
<!ENTITY item-view-received.en SYSTEM "layouts/item-view-sent.en.js">
<!ENTITY item-view-approvalObtained.en SYSTEM "layouts/item-view-approvalObtained.en.js">
<!ENTITY item-view-ownerApproved.en SYSTEM "layouts/item-view-ownerApproved.en.js">
<!ENTITY sent.en SYSTEM "layouts/sent.en.js">
<!ENTITY received.en SYSTEM "layouts/received.en.js">
<!ENTITY receivedApproval.en SYSTEM "layouts/receivedApproval.en.js">
<!ENTITY gaveApproval.en SYSTEM "layouts/gaveApproval.en.js">
]>
<ts:token xmlns:ts="http://tokenscript.org/2020/06/tokenscript"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:asnx="urn:ietf:params:xml:ns:asnx"
xmlns:ethereum="urn:ethereum:constantinople"
xsi:schemaLocation="http://tokenscript.org/2020/06/tokenscript http://tokenscript.org/2020/06/tokenscript.xsd"
custodian="false"
>
<asnx:module name="ERC721-Events">
<namedType name="Approval">
<type>
<sequence>
<element name="owner" ethereum:type="address" ethereum:indexed="true"/>
<element name="approved" ethereum:type="address" ethereum:indexed="true"/>
<element name="tokenId" ethereum:type="uint256" ethereum:indexed="false"/>
</sequence>
</type>
</namedType>
<namedType name="Transfer">
<type>
<sequence>
<element name="from" ethereum:type="address" ethereum:indexed="true"/>
<element name="to" ethereum:type="address" ethereum:indexed="true"/>
<element name="tokenId" ethereum:type="uint256" ethereum:indexed="false"/>
</sequence>
</type>
</namedType>
</asnx:module>
<ts:cards>
<ts:card type="activity" name="sent">
<ts:origins>
<!-- this gives you card attributes from, to, tokenID, which is different than the
token's attributes -->
<ethereum:event type="Transfer" filter="from=${ownerAddress}"/>
</ts:origins>
<ts:item-view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
this.setConfirm();
}
setConfirm() {
window.onConfirm = function() {
window.close();
}
}
render() {
let message = "Sample about page for your token, fill me up!";
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;Sent ${this.props.symbol} tokenId: ${this.props.tokenId}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:item-view>
<ts:view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
}
render() {
let message = `Sent ${this.props.symbol}`;
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;${message}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;p&gt;Sent tokenId: ${this.props.tokenId} ${this.props.symbol}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:view>
</ts:card>
<ts:card type="activity" name="received">
<ts:origins>
<!-- this gives you card attributes from, to, tokenId, which is different than the
token's attributes which also have tokenId -->
<ethereum:event type="Transfer" filter="to=${ownerAddress}"/>
</ts:origins>
<ts:item-view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
this.setConfirm();
}
setConfirm() {
window.onConfirm = function() {
window.close();
}
}
render() {
let message = "Sample about page for your token, fill me up!";
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;Received ${this.props.symbol} tokenId: ${this.props.tokenId}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:item-view>
<ts:view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
}
render() {
let message = `Received ${this.props.symbol}`;
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;${message}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;p&gt;Received tokenId: ${this.props.tokenId} ${this.props.symbol}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:view>
</ts:card>
<ts:card type="activity" name="ownerApproved">
<ts:origins>
<ethereum:event type="Approval" filter="owner=${ownerAddress}"/>
</ts:origins>
<ts:item-view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
this.setConfirm();
}
setConfirm() {
window.onConfirm = function() {
window.close();
}
}
render() {
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;Gave approval to move tokenId: ${this.props.tokenId} ${this.props.symbol} to ${this.props.to}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:item-view>
<ts:view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
}
render() {
let message = `Given approval for ${this.props.symbol}`;
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;img src="data:image/png;base64,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
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;${message}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;p&gt;You have approved ${this.props.to} to move tokenId: ${this.props.tokenId} ${this.props.symbol}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:view>
</ts:card>
<ts:card type="activity" name="approvalObtained">
<ts:origins>
<ethereum:event type="Approval" filter="approved=${ownerAddress}"/>
</ts:origins>
<ts:item-view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
this.setConfirm();
}
setConfirm() {
window.onConfirm = function() {
window.close();
}
}
render() {
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;Approved to move tokenId: ${this.props.tokenId} ${this.props.symbol} from ${this.props.from}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:item-view>
<ts:view xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<style type="text/css">&style;</style>
<script type="text/javascript">
class Token {
constructor(tokenInstance) {
this.props = tokenInstance;
}
render() {
let message = `Received approval for ${this.props.symbol}`;
return`
&lt;div class="ui container"&gt;
&lt;div class="ui segment"&gt;
&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAIRlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAASygAwAEAAAAAQAAAJYAAAAAunEs9AAAAAlwSFlzAAALEwAACxMBAJqcGAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAMKxJREFUeAHt3Qn8ddX0P/ATIRkqaRQepaiUUsmQehAZkmhQhmgSIeolQvGokIjSIJIhmZpeqQwNaFBR0YDQ5ElJSSmR2f//fe9a39/pdu/93vl772Ot1+vec+85e1h77b0/e+21195nof83RVVSSiAlkBKYAAk8YAJ4TBZTAimBlECRQAJWNoSUQEpgYiSQgDUxVZWMpgRSAglY2QZSAimBiZFAAtbEVFUymhJICSRgZRtICaQEJkYCCVgTU1XJaEogJZCAlW0gJZASmBgJJGBNTFUloymBlEACVraBlEBKYGIkkIA1MVWVjKYEUgIJWNkGUgIpgYmRQALWxFRVMpoSSAkkYGUbSAmkBCZGAglYE1NVyWhKICWQgJVtICWQEpgYCSRgTUxVJaMpgZRAAla2gZRASmBiJJCANTFVlYymBFICCVjZBlICKYGJkUAC1sRUVTKaEuhMAv/+97+r//znP50FnrBQCVgTVmHJbkqglQT++9//lkfnn39+dc4555Tfca9VnEm7v/CkMZz8pgRSAveXgLf1PeABD6juuuuu6uyzz65++MMfVuuuu271yEc+svJsoYUWun+kCbyTGtYEVlqynBJoJQFAZUp41llnVSeddFIJtiC9ejQBq1XN5/2UwIRIwLSPBnX99ddXP/nJT6pFF1202mCDDartt9++uu6664rmtaBMDROwJqRRJpspgWYSiKkgrer73/9+9eAHP7hMASPsZz7zmfLfdHFBoAWjFAtCTWQZUgI9SCCme5dddlk1f/78apFFFqloU3//+9+ruXPnVgceeGB17rnnlpQXBC0rAauHRpJRUgLjIIHQru68886yKviIRzxi2p3BFPHuu++u1lhjjWq//farhKFlBcCNA/+98JCA1YvUMk5KYIwkwND+17/+tXrgAx94H67+9a9/VUsuuWT1ve99rzrxxBPLswSs+4go/6QEUgKjkEAY2k0DL7nkkuK+0OgsSsv6y1/+UgzwO+64Y3XNNddMvAE+NaxRtK7MIyUwQAnEVDAM7Q95yENaTvWEDa3qyCOPLPatSTbAJ2ANsCFlUimBUUggAOjSSy8trgxhaG+WNy3rb3/7WzHAH3TQQRPvAZ+A1ayW815KYEwlENrVHXfcUcCHJ3vjVLDOuvBhgF9zzTWrefPmVeJOqgE+Aateu/k7JTAhEmBopzk1GtpbsW/6uMQSSxQXhxNOOKFVsLG/n4A19lWUDKYE7pFAGNp/85vfVD/96U+ruhvDTDKqG+B33nnn6qqrriqa16T5ZiVgzVTT+TwlMAYSiKkgVwVuCo0e7Z2wKI0AvU9/+tNlKjlpU8MErE5qOsOkBGZZAsAG0axuuOGGaY/2btiiZfGA32ijjaqDDz64nOogfqTdTVqzFTYBa7Ykn/mmBDqUQGhXf/rTn4oNaiZDe7tkgRYn06c+9anFAC/NSdKyErDa1W4+SwmMkQTOO++8oiH160dlVXHxxRcvZ2Ydd9xxY1TCmVlJwJpZRhkiJTBrEgibk2Ni+F0xtPdrKA8D/HOe85zqTW96U/XrX/96YgzwCViz1hQz45RAewnEVJCh3dEx7RxE26fU/ClN62EPe1h1+OGHT4wBPgGreV3m3ZTArEsgjOEO5WNob7cFpxdmGeDXW2+96tBDDy2AKI3Is5f0RhEnAWsUUs48UgJdSiC0q9tvv71vQ3urrMMAv9Zaa1X77LNPddttt429AT4Bq1Vt5v2UwBhIwOF7//jHPwqQDIMd00Krjj/+8Y+rb3zjG8PIYqBpJmANVJyZWEqgfwmEod1xMJdffvlADO2tuKob4N/ylrdUv/zlL8faAJ+A1aom835KYBYkEFPBf/7zn0MxtDcrEtCiaVmBPOyww8pbd8bVNysBq1kN5r2UwCxLgKH9d7/73cAN7a2KxQC/zjrrVEcccUTZ+iPcOBrgE7Ba1WDeTwmMWAIAgrbD+M12tdhii7U9OmaQ7IUBfu2116723nvv6o9//ONYGuATsAZZ65lWSqAPCQANBKz4XsX/PpLsKmpMCx25/PWvf72ruKMKnIA1KklnPimBNhII7/Wrr766GNof/vCH9+3R3ia7po8ApDPgN9xww+ptb3tb9Ytf/GLsDPAJWE2rLm+mBEYngTC0c1/g0f7Qhz505GAVpQVaDvt79KMfXRxKaXrjZIBPwIqaymtKYJYlYCr2+9//fmSG9lbFZYB/ylOeUnlr9FlnnVWCjYsBPgGrVa3l/ZTACCQQhnZGbqcx9HN0zKDYpWU5guZpT3tatddee1W33nrr2GhZCViDquVMJyXQgwTCsH7OOeeUqVj87yGpgUZhgGdHu+KKK6qvfvWrA027n8QSsPqRXsZNCfQhgTC0O97lZz/7WQGIuNdHsgOJCjjDAP+Od7yj+vnPfz4WBviFB1K6FokMU/itDjHrJ88Y3eLaolh93TYFCHuAfOp5tXvWSab9lL2T9Bv5nSlOq/LU70ujVV3OlH43z+t5jiK/mXjDDz7YixjaF1100VkztLfiVX0zui+zzDLVIYccUo6hibPk6+22Vfxh3B8qYM1GwxhEntG4u+2g7SoImOCtXZqNz8RpvNcuj0GUvV36npENntrRTGVtVqaI0y7dXp5FXYbse0ljmHEuvvji6pZbbikngJqGjRsB1NVWW6363Oc+V22++ebVS1/60o7awLDKsdBUhd5zuv2Ac4DM1FyVoIFGQ2/MLp5F9vX/8ds1SMO27GsVo34/nvMdocp6X1tjXhHGtTFtI5xjY338Duq3I0W5Iz2rQDa1+jjj6K677iq84NdINmfOnOqJT3xiteKKK07z0Y6HSF/DIu+QSdyPfONavx+/G6/1sH7r7Pa2Pf7xj6+WX3756bqMcHGVDgoebC0x3bn22mtLWb1HDznX6TGPeUwp55Oe9KTqcY97XLnfGL/c7OFLOj51ALdUb2MvcHje8553n2c9ZNFXFLyREWP20Ucf3dMbcJoxIF3tiMH8lFNOme57zcJ2c48cpX333XdXP/jBD6qll166aIN1+XaTXj9hB65hRWXwKbE3aRi08cYbV9/97nenQSk6iLwOOOCA6thjj+052+c+97nV85///PJmEaskAV5Rrm4SrgON420d3/HRj360oyQ22GCDcnytEQ2Iyh/Vy1pP6M4776ye/vSn128N/PdJJ51UveIVr2gKWHX5GDSOOeaY6sADD+yIBzaSHXfcsQxCItTT6iiBe+OEjHSkkNNNN91Ujk458cQTq6985SvlwLoLLrigAFYv+XTKT7twwVsY2gd9MF+7vHt5
&lt;span&gt;&lt;bold&gt;&lt;h3&gt;${message}&lt;/h3&gt;&lt;/bold&gt;&lt;/span&gt;
&lt;p&gt;Approved to move tokenId: ${this.props.tokenId} ${this.props.symbol} from ${this.props.from}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
`;
}
}
web3.tokens.dataChanged = (oldTokens, updatedTokens, tokenIdCard) =&gt; {
const currentTokenInstance = web3.tokens.data.currentInstance;
document.getElementById(tokenIdCard).innerHTML = new Token(currentTokenInstance).render();
};
</script>
</ts:view>
</ts:card>
</ts:cards>
<ts:attribute name="name">
<ts:type>
<ts:syntax>1.3.6.1.4.1.1466.115.121.1.26</ts:syntax>
</ts:type>
<ts:label>
<ts:string xml:lang="en">name</ts:string>
</ts:label>
<ts:origins>
<ethereum:call function="name" as="utf8"/>
</ts:origins>
</ts:attribute>
<ts:attribute name="symbol">
<ts:type>
<ts:syntax>1.3.6.1.4.1.1466.115.121.1.26</ts:syntax>
</ts:type>
<ts:label>
<ts:string xml:lang="en">symbol</ts:string>
</ts:label>
<ts:origins>
<ethereum:call function="symbol" as="utf8"/>
</ts:origins>
</ts:attribute>
</ts:token>