Socket
Socket
Sign inDemoInstall

@solana/web3.js

Package Overview
Dependencies
Maintainers
1
Versions
1815
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solana/web3.js - npm Package Compare versions

Comparing version 0.13.4 to 0.13.5

bpf-sdk/LICENSE

43

bpf-sdk/README.md

@@ -1,41 +0,1 @@

## Prerequisites
## LLVM / clang 7.0.0
http://releases.llvm.org/download.html
### Linux Ubuntu 18.04 (bionic)
```
$ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-7 main"
$ sudo apt-get update
$ sudo apt-get install -y clang-7
```
### Linux Ubuntu 16.04 (xenial)
```
$ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main"
$ sudo apt-get update
$ sudo apt-get install -y clang-7
```
### Linux Ubuntu 14.04 (trusty)
```
$ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-7 main"
$ sudo apt-get update
$ sudo apt-get install -y clang-7
```
### macOS
The following depends on Homebrew, instructions on how to install Homebrew are at https://brew.sh
Once Homebrew is installed, ensure the latest llvm is installed:
```
$ brew update # <- ensure your brew is up to date
$ brew install llvm # <- should output “Warning: llvm 7.0.0 is already installed and up-to-date”
$ brew --prefix llvm # <- should output “/usr/local/opt/llvm”
```
## Development

@@ -84,3 +44,2 @@

* Programs must be fully contained within a single .c file
* No libc is available but `solana_sdk.h` provides a minimal set of
primitives.
* No libc is available but `solana_sdk.h` provides a minimal set of primitives
0.11.0
bad0b55ab66a9230d7a39a5b4d24546dc7d19088
f6f0a5d448476c54adf622634899070f958437d4

@@ -1,1 +0,2 @@

"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var nacl=_interopDefault(require("tweetnacl")),bs58=_interopDefault(require("bs58")),_Object$keys=_interopDefault(require("babel-runtime/core-js/object/keys")),url=require("url"),fetch=_interopDefault(require("node-fetch")),jayson=_interopDefault(require("jayson/lib/client/browser")),superstruct=require("superstruct"),rpcWebsockets=require("rpc-websockets"),_Promise=_interopDefault(require("babel-runtime/core-js/promise")),_getIterator=_interopDefault(require("babel-runtime/core-js/get-iterator")),_JSON$stringify=_interopDefault(require("babel-runtime/core-js/json/stringify")),_Object$assign=_interopDefault(require("babel-runtime/core-js/object/assign")),_toConsumableArray=_interopDefault(require("babel-runtime/helpers/toConsumableArray")),_Object$getPrototypeOf=_interopDefault(require("babel-runtime/core-js/object/get-prototype-of")),_classCallCheck=_interopDefault(require("babel-runtime/helpers/classCallCheck")),_createClass=_interopDefault(require("babel-runtime/helpers/createClass")),_possibleConstructorReturn=_interopDefault(require("babel-runtime/helpers/possibleConstructorReturn")),_get=_interopDefault(require("babel-runtime/helpers/get")),_inherits=_interopDefault(require("babel-runtime/helpers/inherits")),assert=_interopDefault(require("assert")),BN=_interopDefault(require("bn.js")),BufferLayout=require("buffer-layout"),_regeneratorRuntime=_interopDefault(require("babel-runtime/regenerator")),_asyncToGenerator=_interopDefault(require("babel-runtime/helpers/asyncToGenerator")),PublicKey=function(){function e(t){if(_classCallCheck(this,e),this._bn="string"==typeof t?t.startsWith("0x")?new BN(t.substring(2),16):new BN(bs58.decode(t)):new BN(t),this._bn.byteLength()>32)throw Error("Invalid public key input")}return _createClass(e,[{key:"equals",value:function(e){return this._bn.eq(e._bn)}},{key:"toBase58",value:function(){return bs58.encode(this.toBuffer())}},{key:"toBuffer",value:function(){var e=this._bn.toArrayLike(Buffer);if(32===e.length)return e;var t=Buffer.alloc(32);return e.copy(t,32-e.length),t}},{key:"toString",value:function(){return this.toBase58()}}],[{key:"isPublicKey",value:function(t){return t instanceof e}}]),e}(),Account=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;_classCallCheck(this,e),this._keypair=t?nacl.sign.keyPair.fromSecretKey(t):nacl.sign.keyPair()}return _createClass(e,[{key:"publicKey",get:function(){return new PublicKey(this._keypair.publicKey)}},{key:"secretKey",get:function(){return this._keypair.secretKey}}]),e}(),publicKey=function(){return BufferLayout.blob(32,arguments.length>0&&void 0!==arguments[0]?arguments[0]:"publicKey")},uint64=function(){return BufferLayout.blob(8,arguments.length>0&&void 0!==arguments[0]?arguments[0]:"uint64")},rustString=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"string",t=BufferLayout.struct([BufferLayout.u32("length"),BufferLayout.u32("lengthPadding"),BufferLayout.blob(BufferLayout.offset(BufferLayout.u32(),-8),"chars")],e),r=t.decode.bind(t),n=t.encode.bind(t);return t.decode=function(e,t){return r(e,t).chars.toString("utf8")},t.encode=function(e,t,r){var a={chars:Buffer.from(e,"utf8")};return n(a,t,r)},t},PACKET_DATA_SIZE=512,TransactionInstruction=function e(t){_classCallCheck(this,e),this.keys=[],this.userdata=Buffer.alloc(0),t&&_Object$assign(this,t)},Transaction=function(){function e(t){_classCallCheck(this,e),this.signatures=[],this.instructions=[],this.fee=1,t&&_Object$assign(this,t)}return _createClass(e,[{key:"signature",get:function(){return this.signatures.length>0?this.signatures[0].signature:null}}]),_createClass(e,[{key:"add",value:function(){for(var t=this,r=arguments.length,n=Array(r),a=0;r>a;a++)n[a]=arguments[a];if(0===n.length)throw Error("No instructions");return n.forEach(function(r){r instanceof e?t.instructions=t.instructions.concat(r.instructions):t.instructions.push(new TransactionInstruction(r))}),this}},{key:"_getSignData",value:function(){var e=this.lastId;if(!e)throw Error("Transaction lastId required");if(1>this.instructions.length)throw Error("No instructions provided");var t=this.signatures.map(function(e){return""+e.publicKey}),r=[];this.instructions.forEach(function(e){var n=""+e.programId;r.includes(n)||r.push(n),e.keys.map(function(e){return""+e}).forEach(function(e){t.includes(e)||t.push(e)})});var n=this.instructions.map(function(e){var n=e.userdata;return{programIdIndex:r.indexOf(""+e.programId),keyIndices:e.keys.map(function(e){return t.indexOf(""+e)}),userdata:n}});n.forEach(function(e){assert(e.programIdIndex>=0),e.keyIndices.forEach(function(e){return assert(e>=0)})});var a=BufferLayout.struct([BufferLayout.u8("programIdIndex"),BufferLayout.u32("keyIndicesLength"),BufferLayout.u32("keyIndicesLengthPadding"),BufferLayout.seq(BufferLayout.u8("keyIndex"),BufferLayout.offset(BufferLayout.u32(),-8),"keyIndices"),BufferLayout.u32("userdataLength"),BufferLayout.u32("userdataLengthPadding"),BufferLayout.seq(BufferLayout.u8("userdatum"),BufferLayout.offset(BufferLayout.u32(),-8),"userdata")]),u=BufferLayout.struct([BufferLayout.u32("keysLength"),BufferLayout.u32("keysLengthPadding"),BufferLayout.seq(publicKey("key"),BufferLayout.offset(BufferLayout.u32(),-8),"keys"),publicKey("lastId"),BufferLayout.ns64("fee"),BufferLayout.u32("programIdsLength"),BufferLayout.u32("programIdsLengthPadding"),BufferLayout.seq(publicKey("programId"),BufferLayout.offset(BufferLayout.u32(),-8),"programIds"),BufferLayout.u32("instructionsLength"),BufferLayout.u32("instructionsLengthPadding"),BufferLayout.seq(a,BufferLayout.offset(BufferLayout.u32(),-8),"instructions")]),o={keys:t.map(function(e){return new PublicKey(e).toBuffer()}),lastId:Buffer.from(bs58.decode(e)),fee:this.fee,programIds:r.map(function(e){return new PublicKey(e).toBuffer()}),instructions:n},s=Buffer.alloc(2048),i=u.encode(o,s);return s=s.slice(0,i)}},{key:"sign",value:function(){this.signPartial.apply(this,arguments)}},{key:"signPartial",value:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];if(0===t.length)throw Error("No signers");var n=t.map(function(e){return{signature:null,publicKey:e instanceof Account?e.publicKey:e}});this.signatures=n;var a=this._getSignData();t.forEach(function(e,t){if(!(e instanceof PublicKey)){var r=nacl.sign.detached(a,e.secretKey);assert(64===r.length),n[t].signature=r}})}},{key:"addSigner",value:function(e){var t=this.signatures.findIndex(function(t){return e.publicKey.equals(t.publicKey)});if(0>t)throw Error("Unknown signer: "+e.publicKey);var r=this._getSignData(),n=nacl.sign.detached(r,e.secretKey);assert(64===n.length),this.signatures[t].signature=n}},{key:"serialize",value:function(){var e=this.signatures;if(!e)throw Error("Transaction has not been signed");var t=this._getSignData(),r=Buffer.alloc(8+64*e.length+t.length);return assert(256>e.length),r.writeUInt8(e.length,0),e.forEach(function(e,t){var n=e.signature;assert(null!==n,"null signature"),assert(64===n.length,"signature has invalid length"),Buffer.from(n).copy(r,8+64*t)}),t.copy(r,8+64*e.length),assert(PACKET_DATA_SIZE>=r.length,"Transaction too large: "+r.length+" > "+PACKET_DATA_SIZE),r}},{key:"keys",get:function(){return assert(1===this.instructions.length),this.instructions[0].keys}},{key:"programId",get:function(){return assert(1===this.instructions.length),this.instructions[0].programId}},{key:"userdata",get:function(){return assert(1===this.instructions.length),this.instructions[0].userdata}}]),e}(),SystemProgram=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"createAccount",value:function(t,r,n,a,u){var o=BufferLayout.struct([BufferLayout.u32("instruction"),BufferLayout.ns64("tokens"),BufferLayout.ns64("space"),publicKey("programId")]),s=Buffer.alloc(o.span);return o.encode({instruction:0,tokens:n,space:a,programId:u.toBuffer()},s),(new Transaction).add({keys:[t,r],programId:e.programId,userdata:s})}},{key:"move",value:function(t,r,n){var a=BufferLayout.struct([BufferLayout.u32("instruction"),BufferLayout.ns64("amount")]),u=Buffer.alloc(a.span);return a.encode({instruction:2,amount:n},u),(new Transaction).add({keys:[t,r],programId:e.programId,userdata:u})}},{key:"assign",value:function(t,r){var n=BufferLayout.struct([BufferLayout.u32("instruction"),publicKey("programId")]),a=Buffer.alloc(n.span);return n.encode({instruction:1,programId:r.toBuffer()},a),(new Transaction).add({keys:[t],programId:e.programId,userdata:a})}},{key:"spawn",value:function(t){var r=BufferLayout.struct([BufferLayout.u32("instruction")]),n=Buffer.alloc(r.span);return r.encode({instruction:3},n),(new Transaction).add({keys:[t],programId:e.programId,userdata:n})}},{key:"programId",get:function(){return new PublicKey("0x000000000000000000000000000000000000000000000000000000000000000")}}]),e}();function sleep(e){return new _Promise(function(t){return setTimeout(t,e)})}function createRpcRequest(e){var t,r=this,n=jayson((t=_asyncToGenerator(_regeneratorRuntime.mark(function t(n,a){var u,o;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return u={method:"POST",body:n,headers:{"Content-Type":"application/json"}},t.prev=1,t.next=4,fetch(e,u);case 4:return o=t.sent,t.next=7,o.text();case 7:a(null,t.sent),t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),a(t.t0);case 14:case"end":return t.stop()}},t,r,[[1,11]])})),function(e,r){return t.apply(this,arguments)}));return function(e,t){return new _Promise(function(r,a){n.request(e,t,function(e,t){e?a(e):r(t)})})}}var GetBalanceRpcResult=superstruct.struct({jsonrpc:superstruct.struct.literal("2.0"),id:"string",error:"any?",result:"number?"});function jsonRpcResult(e){var t=superstruct.struct.literal("2.0");return superstruct.struct.union([superstruct.struct({jsonrpc:t,id:"string",error:"any"}),superstruct.struct({jsonrpc:t,id:"string",error:"null?",result:e})])}var AccountInfoResult=superstruct.struct({executable:"boolean",loader:"array",owner:"array",tokens:"number",userdata:"array"}),GetAccountInfoRpcResult=jsonRpcResult(AccountInfoResult),AccountNotificationResult=superstruct.struct({subscription:"number",result:AccountInfoResult}),ConfirmTransactionRpcResult=jsonRpcResult("boolean"),GetSignatureStatusRpcResult=jsonRpcResult(superstruct.struct.enum(["AccountInUse","Confirmed","GenericFailure","ProgramRuntimeError","SignatureNotFound"])),GetTransactionCountRpcResult=jsonRpcResult("number"),GetLastId=jsonRpcResult("string"),GetFinalityRpcResult=jsonRpcResult("number"),RequestAirdropRpcResult=jsonRpcResult("string"),SendTransactionRpcResult=jsonRpcResult("string"),Connection=function(){function e(t){_classCallCheck(this,e),this._rpcWebSocketConnected=!1,this._disableLastIdCaching=!1,this._accountChangeSubscriptions={},this._accountChangeSubscriptionCounter=0;var r=url.parse(t);this._rpcRequest=createRpcRequest(r.href),this._lastIdInfo={lastId:null,seconds:-1,transactionSignatures:[]},r.protocol="https:"===r.protocol?"wss:":"ws:",r.host="",r.port=+r.port+1+"","1"===r.port&&(r.port="wss:"===r.protocol?"8901":"8900"),this._rpcWebSocket=new rpcWebsockets.Client(url.format(r),{autoconnect:!1,max_reconnects:1/0}),this._rpcWebSocket.on("open",this._wsOnOpen.bind(this)),this._rpcWebSocket.on("error",this._wsOnError.bind(this)),this._rpcWebSocket.on("close",this._wsOnClose.bind(this)),this._rpcWebSocket.on("accountNotification",this._wsOnAccountNotification.bind(this))}return _createClass(e,[{key:"getBalance",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getBalance",[t.toBase58()]);case 2:if(!(r=GetBalanceRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),e.abrupt("return",r.result);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getAccountInfo",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getAccountInfo",[t.toBase58()]);case 2:if(!(r=GetAccountInfoRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==(n=r.result)),e.abrupt("return",{executable:n.executable,loader:new PublicKey(n.loader),owner:new PublicKey(n.owner),tokens:n.tokens,userdata:Buffer.from(n.userdata)});case 9:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"confirmTransaction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("confirmTransaction",[t]);case 2:if(!(r=ConfirmTransactionRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),e.abrupt("return",r.result);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getSignatureStatus",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getSignatureStatus",[t]);case 2:if(!(r=GetSignatureStatusRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),e.abrupt("return",r.result);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getTransactionCount",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getTransactionCount",[]);case 2:if(!(t=GetTransactionCountRpcResult(e.sent)).error){e.next=6;break}throw Error(t.error.message);case 6:return assert(void 0!==t.result),e.abrupt("return",+t.result);case 8:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"getLastId",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getLastId",[]);case 2:if(!(t=GetLastId(e.sent)).error){e.next=6;break}throw Error(t.error.message);case 6:return assert(void 0!==t.result),e.abrupt("return",t.result);case 8:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"getFinality",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getFinality",[]);case 2:if(!(t=GetFinalityRpcResult(e.sent)).error){e.next=6;break}throw Error(t.error.message);case 6:return assert(void 0!==t.result),e.abrupt("return",+t.result);case 8:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"requestAirdrop",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r){var n;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("requestAirdrop",[t.toBase58(),r]);case 2:if(!(n=RequestAirdropRpcResult(e.sent)).error){e.next=6;break}throw Error(n.error.message);case 6:return assert(void 0!==n.result),e.abrupt("return",n.result);case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"sendTransaction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){for(var r=arguments.length,n=Array(r>1?r-1:0),a=1;r>a;a++)n[a-1]=arguments[a];var u,o,s,i,c,f;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(u=(new Date).getSeconds(),null==this._lastIdInfo.lastId||this._lastIdInfo.seconds!==u){e.next=11;break}if(t.lastId=this._lastIdInfo.lastId,t.sign.apply(t,n),t.signature){e.next=6;break}throw Error("!signature");case 6:if(this._lastIdInfo.transactionSignatures.includes(o=""+t.signature)){e.next=11;break}return this._lastIdInfo.transactionSignatures.push(o),this._disableLastIdCaching&&(this._lastIdInfo.seconds=-1),e.abrupt("break",28);case 11:s=0,i=Date.now();case 13:return e.next=15,this.getLastId();case 15:if(this._lastIdInfo.lastId==(c=e.sent)){e.next=19;break}return this._lastIdInfo={lastId:c,seconds:(new Date).getSeconds(),transactionSignatures:[]},e.abrupt("break",26);case 19:if(8!==s){e.next=21;break}throw Error("Unable to obtain a new last id after "+(Date.now()-i)+"ms");case 21:return e.next=23,sleep(250);case 23:++s;case 24:e.next=13;break;case 26:e.next=0;break;case 28:return f=t.serialize(),e.next=31,this.sendRawTransaction(f);case 31:return e.abrupt("return",e.sent);case 32:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"sendRawTransaction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("sendTransaction",[[].concat(_toConsumableArray(t))]);case 2:if(!(r=SendTransactionRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),assert(r.result),e.abrupt("return",r.result);case 9:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"_wsOnOpen",value:function(){this._rpcWebSocketConnected=!0,this._updateSubscriptions()}},{key:"_wsOnError",value:function(e){console.log("ws error:",e.message)}},{key:"_wsOnClose",value:function(e,t){1e3!==e&&console.log("ws close:",e,t),this._rpcWebSocketConnected=!1}},{key:"_wsOnAccountNotification",value:function(e){var t=AccountNotificationResult(e);if(t.error)throw Error(t.error.message);var r=_Object$keys(this._accountChangeSubscriptions).map(Number),n=!0,a=!1,u=void 0;try{for(var o,s=_getIterator(r);!(n=(o=s.next()).done);n=!0){var i=this._accountChangeSubscriptions[o.value];if(i.subscriptionId===t.subscription){var c=t.result;return assert(void 0!==c),i.callback({executable:c.executable,loader:new PublicKey(c.loader),owner:new PublicKey(c.owner),tokens:c.tokens,userdata:Buffer.from(c.userdata)}),!0}}}catch(e){a=!0,u=e}finally{try{!n&&s.return&&s.return()}finally{if(a)throw u}}}},{key:"_updateSubscriptions",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t,r,n,a,u,o,s,i,c,f,l,p,d,h;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==(t=_Object$keys(this._accountChangeSubscriptions).map(Number)).length){e.next=4;break}return this._rpcWebSocket.close(),e.abrupt("return");case 4:if(this._rpcWebSocketConnected){e.next=26;break}for(r=!0,n=!1,a=void 0,e.prev=8,u=_getIterator(t);!(r=(o=u.next()).done);r=!0)this._accountChangeSubscriptions[o.value].subscriptionId=null;e.next=16;break;case 12:e.prev=12,e.t0=e.catch(8),n=!0,a=e.t0;case 16:e.prev=16,e.prev=17,!r&&u.return&&u.return();case 19:if(e.prev=19,!n){e.next=22;break}throw a;case 22:return e.finish(19);case 23:return e.finish(16);case 24:return this._rpcWebSocket.connect(),e.abrupt("return");case 26:s=!0,i=!1,c=void 0,e.prev=29,f=_getIterator(t);case 31:if(s=(l=f.next()).done){e.next=47;break}if(h=(d=this._accountChangeSubscriptions[p=l.value]).publicKey,null!==d.subscriptionId){e.next=44;break}return e.prev=35,e.next=38,this._rpcWebSocket.call("accountSubscribe",[h]);case 38:this._accountChangeSubscriptions[p].subscriptionId=e.sent,e.next=44;break;case 41:e.prev=41,e.t1=e.catch(35),console.log("accountSubscribe error for "+h+": "+e.t1.message);case 44:s=!0,e.next=31;break;case 47:e.next=53;break;case 49:e.prev=49,e.t2=e.catch(29),i=!0,c=e.t2;case 53:e.prev=53,e.prev=54,!s&&f.return&&f.return();case 56:if(e.prev=56,!i){e.next=59;break}throw c;case 59:return e.finish(56);case 60:return e.finish(53);case 61:case"end":return e.stop()}},e,this,[[8,12,16,24],[17,,19,23],[29,49,53,61],[35,41],[54,,56,60]])}));return function(){return e.apply(this,arguments)}}()},{key:"onAccountChange",value:function(e,t){var r=++this._accountChangeSubscriptionCounter;return this._accountChangeSubscriptions[r]={publicKey:e.toBase58(),callback:t,subscriptionId:null},this._updateSubscriptions(),r}},{key:"removeAccountChangeListener",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._accountChangeSubscriptions[t]){e.next=15;break}if(r=this._accountChangeSubscriptions[t].subscriptionId,delete this._accountChangeSubscriptions[t],null===r){e.next=12;break}return e.prev=4,e.next=7,this._rpcWebSocket.call("accountUnsubscribe",[r]);case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(4),console.log("accountUnsubscribe error:",e.t0.message);case 12:this._updateSubscriptions(),e.next=16;break;case 15:throw Error("Unknown account change id: "+t);case 16:case"end":return e.stop()}},e,this,[[4,9]])}));return function(t){return e.apply(this,arguments)}}()}]),e}(),sendAndConfirmTransaction=function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r){for(var n=arguments.length,a=Array(n>2?n-2:0),u=2;n>u;u++)a[u-2]=arguments[u];var o,s,i,c,f,l;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:o=10,s=void 0;case 2:return i=Date.now(),e.next=5,t.sendTransaction.apply(t,[r].concat(a));case 5:s=e.sent,c="SignatureNotFound",f=4;case 8:return e.next=10,t.getSignatureStatus(s);case 10:if("SignatureNotFound"===(c=e.sent)){e.next=13;break}return e.abrupt("break",20);case 13:return e.next=15,sleep(500);case 15:if(0<--f){e.next=18;break}throw l=(Date.now()-i)/1e3,Error("Transaction '"+s+"' was not confirmed in "+l.toFixed(2)+" seconds ("+c+")");case 18:e.next=8;break;case 20:if("Confirmed"!==c){e.next=22;break}return e.abrupt("break",28);case 22:if("AccountInUse"===c&&--o>0){e.next=24;break}throw Error("Transaction "+s+" failed ("+c+")");case 24:return e.next=26,sleep(100*Math.random());case 26:e.next=2;break;case 28:return assert(void 0!==s),e.abrupt("return",s);case 30:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}(),Loader=function(){function e(t,r){_classCallCheck(this,e),_Object$assign(this,{connection:t,programId:r})}return _createClass(e,null,[{key:"chunkSize",get:function(){return 256}}]),_createClass(e,[{key:"load",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n){var a,u,o,s,i,c,f,l;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:a=BufferLayout.struct([BufferLayout.u32("instruction"),BufferLayout.u32("offset"),BufferLayout.u32("bytesLength"),BufferLayout.u32("bytesLengthPadding"),BufferLayout.seq(BufferLayout.u8("byte"),BufferLayout.offset(BufferLayout.u32(),-8),"bytes")]),u=e.chunkSize,o=0,s=n,i=[];case 5:if(s.length<=0){t.next=19;break}if(c=s.slice(0,u),f=Buffer.alloc(u+16),a.encode({instruction:0,offset:o,bytes:c},f),l=(new Transaction).add({keys:[r.publicKey],programId:this.programId,userdata:f}),i.push(sendAndConfirmTransaction(this.connection,l,r)),8!==i.length){t.next=15;break}return t.next=14,_Promise.all(i);case 14:i=[];case 15:o+=u,s=s.slice(u),t.next=5;break;case 19:return t.next=21,_Promise.all(i);case 21:case"end":return t.stop()}},t,this)}));return function(e,r){return t.apply(this,arguments)}}()},{key:"finalize",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n,a;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=BufferLayout.struct([BufferLayout.u32("instruction")]),n=Buffer.alloc(r.span),r.encode({instruction:1},n),(a=new Transaction).add({keys:[t.publicKey],programId:this.programId,userdata:n}),a.add(SystemProgram.spawn(t.publicKey)),e.next=8,sendAndConfirmTransaction(this.connection,a,t);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()}]),e}(),BpfLoader=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"load",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n,a){var u,o,s;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return u=new Account,o=SystemProgram.createAccount(n.publicKey,u.publicKey,1+Math.ceil(a.length/Loader.chunkSize)+1,a.length,e.programId),t.next=4,sendAndConfirmTransaction(r,o,n);case 4:return s=new Loader(r,e.programId),t.next=7,s.load(u,a);case 7:return t.next=9,s.finalize(u);case 9:return t.abrupt("return",u.publicKey);case 10:case"end":return t.stop()}},t,this)}));return function(e,r,n){return t.apply(this,arguments)}}()},{key:"programId",get:function(){return new PublicKey("0x8000000000000000000000000000000000000000000000000000000000000000")}}]),e}();function serializePayment(e){var t=e.to.toBuffer(),r=Buffer.alloc(8+t.length);return r.writeUInt32LE(e.amount,0),t.copy(r,8),r}function serializeDate(e){var t=Buffer.alloc(28);return t.writeUInt32LE(20,0),t.write(function(e){function t(e){return 10>e?"0"+e:e}return e.getUTCFullYear()+"-"+t(e.getUTCMonth()+1)+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"Z"}(e),8),t}function serializeCondition(e){switch(e.type){case"timestamp":var t=serializeDate(e.when),r=e.from.toBuffer(),n=Buffer.alloc(4+t.length+r.length);return n.writeUInt32LE(0,0),t.copy(n,4),r.copy(n,4+t.length),n;case"signature":var a=BufferLayout.struct([BufferLayout.u32("condition"),publicKey("from")]),u=e.from.toBuffer(),o=Buffer.alloc(4+u.length);return a.encode({instruction:1,from:u},o),o;default:throw Error("Unknown condition type: "+e.type)}}var BudgetProgram=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"timestampCondition",value:function(e,t){return{type:"timestamp",from:e,when:t}}},{key:"signatureCondition",value:function(e){return{type:"signature",from:e}}},{key:"pay",value:function(e,t,r,n){var a=Buffer.alloc(1024),u=0;a.writeUInt32LE(0,u),u+=4;for(var o=arguments.length,s=Array(o>4?o-4:0),i=4;o>i;i++)s[i-4]=arguments[i];switch(s.length){case 0:a.writeUInt32LE(0,u),u+=4;var c=serializePayment({amount:n,to:r});return c.copy(a,u),u+=c.length,(new Transaction).add({keys:[e,r],programId:this.programId,userdata:a.slice(0,u)});case 1:a.writeUInt32LE(1,u),u+=4;var f=serializeCondition(s[0]);f.copy(a,u),u+=f.length;var l=serializePayment({amount:n,to:r});return l.copy(a,u),u+=l.length,(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:a.slice(0,u)});case 2:a.writeUInt32LE(2,u),u+=4;var p=!0,d=!1,h=void 0;try{for(var y,g=_getIterator(s);!(p=(y=g.next()).done);p=!0){var m=serializeCondition(y.value);m.copy(a,u),u+=m.length;var b=serializePayment({amount:n,to:r});b.copy(a,u),u+=b.length}}catch(e){d=!0,h=e}finally{try{!p&&g.return&&g.return()}finally{if(d)throw h}}return(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:a.slice(0,u)});default:throw Error("A maximum of two conditions are support: "+s.length+" provided")}}},{key:"payOnBoth",value:function(e,t,r,n,a,u){var o=Buffer.alloc(1024),s=0;o.writeUInt32LE(0,s),o.writeUInt32LE(3,s+=4),s+=4;for(var i=[a,u],c=0;i.length>c;c++){var f=serializeCondition(i[c]);f.copy(o,s),s+=f.length}var l=serializePayment({amount:n,to:r});return l.copy(o,s),s+=l.length,(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:o.slice(0,s)})}},{key:"applyTimestamp",value:function(e,t,r,n){var a=serializeDate(n),u=Buffer.alloc(4+a.length);return u.writeUInt32LE(1,0),a.copy(u,4),(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:u})}},{key:"applySignature",value:function(e,t,r){var n=BufferLayout.struct([BufferLayout.u32("instruction")]),a=Buffer.alloc(n.span);return n.encode({instruction:2},a),(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:a})}},{key:"programId",get:function(){return new PublicKey("0x8100000000000000000000000000000000000000000000000000000000000000")}},{key:"space",get:function(){return 128}}]),e}(),NativeLoader=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"load",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n,a){var u,o,s,i;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return u=[].concat(_toConsumableArray(Buffer.from(a))),o=new Account,s=SystemProgram.createAccount(n.publicKey,o.publicKey,3,u.length+1,e.programId),t.next=5,sendAndConfirmTransaction(r,s,n);case 5:return i=new Loader(r,e.programId),t.next=8,i.load(o,u);case 8:return t.next=10,i.finalize(o);case 10:return t.abrupt("return",o.publicKey);case 11:case"end":return t.stop()}},t,this)}));return function(e,r,n){return t.apply(this,arguments)}}()},{key:"programId",get:function(){return new PublicKey("0x100000000000000000000000000000000000000000000000000000000000000")}}]),e}(),TokenAmount=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||_Object$getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,BN),_createClass(t,[{key:"toBuffer",value:function(){var e=_get(t.prototype.__proto__||_Object$getPrototypeOf(t.prototype),"toArray",this).call(this).reverse(),r=Buffer.from(e);if(8===r.length)return r;assert(8>r.length,"TokenAmount too large");var n=Buffer.alloc(8);return r.copy(n),n}}],[{key:"fromBuffer",value:function(e){return assert(8===e.length,"Invalid buffer length: "+e.length),new BN([].concat(_toConsumableArray(e)).reverse().map(function(e){return("00"+e.toString(16)).slice(-2)}).join(""),16)}}]),t}(),TokenInfoLayout=BufferLayout.struct([uint64("supply"),BufferLayout.u8("decimals"),rustString("name"),rustString("symbol")]),TokenAccountInfoLayout=BufferLayout.struct([publicKey("token"),publicKey("owner"),uint64("amount"),BufferLayout.u8("sourceOption"),publicKey("source"),uint64("originalAmount")]),SYSTEM_TOKEN_PROGRAM_ID=new PublicKey("0x8300000000000000000000000000000000000000000000000000000000000000"),Token=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:SYSTEM_TOKEN_PROGRAM_ID;_classCallCheck(this,e),_Object$assign(this,{connection:t,token:r,programId:n})}return _createClass(e,[{key:"newAccount",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n,a,u,o,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=new Account,n=void 0,a=BufferLayout.struct([BufferLayout.u32("instruction")]),u=Buffer.alloc(a.span),a.encode({instruction:1},u),n=SystemProgram.createAccount(t.publicKey,r.publicKey,1,1+TokenAccountInfoLayout.span,this.programId),e.next=8,sendAndConfirmTransaction(this.connection,n,t);case 8:return o=[r.publicKey,t.publicKey,this.token],s&&o.push(s),(n=(new Transaction).add({keys:o,programId:this.programId,userdata:u})).fee=0,e.next=14,sendAndConfirmTransaction(this.connection,n,r);case 14:return e.abrupt("return",r.publicKey);case 15:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"tokenInfo",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t,r,n;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.connection.getAccountInfo(this.token);case 2:if((t=e.sent).owner.equals(this.programId)){e.next=5;break}throw Error("Invalid token owner: "+_JSON$stringify(t.owner));case 5:if(1===(r=Buffer.from(t.userdata)).readUInt8(0)){e.next=8;break}throw Error("Invalid token userdata");case 8:return(n=TokenInfoLayout.decode(r,1)).supply=TokenAmount.fromBuffer(n.supply),e.abrupt("return",n);case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"accountInfo",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n,a;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.connection.getAccountInfo(t);case 2:if((r=e.sent).owner.equals(this.programId)){e.next=5;break}throw Error("Invalid token account owner");case 5:if(2===(n=Buffer.from(r.userdata)).readUInt8(0)){e.next=8;break}throw Error("Invalid token account userdata");case 8:if((a=TokenAccountInfoLayout.decode(n,1)).token=new PublicKey(a.token),a.owner=new PublicKey(a.owner),a.amount=TokenAmount.fromBuffer(a.amount),0===a.sourceOption?(a.source=null,a.originalAmount=new TokenAmount):(a.source=new PublicKey(a.source),a.originalAmount=TokenAmount.fromBuffer(a.originalAmount)),a.token.equals(this.token)){e.next=15;break}throw Error("Invalid token account token: "+_JSON$stringify(a.token)+" !== "+_JSON$stringify(this.token));case 15:return e.abrupt("return",a);case 16:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"transfer",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n,a){return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=sendAndConfirmTransaction,e.t1=this.connection,e.t2=new Transaction,e.next=5,this.transferInstruction(t.publicKey,r,n,a);case 5:return e.t3=e.sent,e.t4=e.t2.add.call(e.t2,e.t3),e.t5=t,e.next=10,(0,e.t0)(e.t1,e.t4,e.t5);case 10:return e.abrupt("return",e.sent);case 11:case"end":return e.stop()}},e,this)}));return function(t,r,n,a){return e.apply(this,arguments)}}()},{key:"approve",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n,a){return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,sendAndConfirmTransaction(this.connection,(new Transaction).add(this.approveInstruction(t.publicKey,r,n,a)),t);case 2:case"end":return e.stop()}},e,this)}));return function(t,r,n,a){return e.apply(this,arguments)}}()},{key:"revoke",value:function(e,t,r){return this.approve(e,t,r,0)}},{key:"setOwner",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n){return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,sendAndConfirmTransaction(this.connection,(new Transaction).add(this.setOwnerInstruction(t.publicKey,r,n)),t);case 2:case"end":return e.stop()}},e,this)}));return function(t,r,n){return e.apply(this,arguments)}}()},{key:"transferInstruction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n,a){var u,o,s,i;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.accountInfo(r);case 2:if(t.equals((u=e.sent).owner)){e.next=5;break}throw Error("Account owner mismatch");case 5:return o=BufferLayout.struct([BufferLayout.u32("instruction"),uint64("amount")]),s=Buffer.alloc(o.span),o.encode({instruction:2,amount:new TokenAmount(a).toBuffer()},s),i=[t,r,n],u.source&&i.push(u.source),e.abrupt("return",new TransactionInstruction({keys:i,programId:this.programId,userdata:s}));case 11:case"end":return e.stop()}},e,this)}));return function(t,r,n,a){return e.apply(this,arguments)}}()},{key:"approveInstruction",value:function(e,t,r,n){var a=BufferLayout.struct([BufferLayout.u32("instruction"),uint64("amount")]),u=Buffer.alloc(a.span);return a.encode({instruction:3,amount:new TokenAmount(n).toBuffer()},u),new TransactionInstruction({keys:[e,t,r],programId:this.programId,userdata:u})}},{key:"revokeInstruction",value:function(e,t,r){return this.approveInstruction(e,t,r,0)}},{key:"setOwnerInstruction",value:function(e,t,r){var n=BufferLayout.struct([BufferLayout.u32("instruction")]),a=Buffer.alloc(n.span);return n.encode({instruction:4},a),new TransactionInstruction({keys:[e,t,r],programId:this.programId,userdata:a})}}],[{key:"createNewToken",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n,a,u,o,s){var i,c,f,l,p,d,h,y=arguments.length>6&&void 0!==arguments[6]?arguments[6]:SYSTEM_TOKEN_PROGRAM_ID;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return i=new Account,c=new e(r,i.publicKey,y),t.next=4,c.newAccount(n,null);case 4:return f=t.sent,l=void 0,p=BufferLayout.struct([BufferLayout.u32("instruction"),uint64("supply"),BufferLayout.u8("decimals"),rustString("name"),rustString("symbol")]),d=Buffer.alloc(1024),h=p.encode({instruction:0,supply:a.toBuffer(),decimals:s,name:u,symbol:o},d),d=d.slice(0,h),l=SystemProgram.createAccount(n.publicKey,i.publicKey,1,1+d.length,y),t.next=13,sendAndConfirmTransaction(r,l,n);case 13:return(l=(new Transaction).add({keys:[i.publicKey,f],programId:y,userdata:d})).fee=0,t.next=17,sendAndConfirmTransaction(r,l,i);case 17:return t.abrupt("return",[c,f]);case 18:case"end":return t.stop()}},t,this)}));return function(e,r,n,a,u,o){return t.apply(this,arguments)}}()}]),e}(),sendAndConfirmRawTransaction=function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r){var n,a,u,o,s;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=Date.now(),e.next=3,t.sendRawTransaction(r);case 3:a=e.sent,u="",o=4;case 6:return e.next=8,t.getSignatureStatus(a);case 8:if("SignatureNotFound"===(u=e.sent)){e.next=11;break}return e.abrupt("break",18);case 11:return e.next=13,sleep(500);case 13:if(0<--o){e.next=16;break}throw s=(Date.now()-n)/1e3,Error("Raw Transaction '"+a+"' was not confirmed in "+s.toFixed(2)+" seconds ("+u+")");case 16:e.next=6;break;case 18:if("Confirmed"!==u){e.next=20;break}return e.abrupt("return",a);case 20:throw Error("Raw transaction "+a+" failed ("+u+")");case 21:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}();exports.Account=Account,exports.BpfLoader=BpfLoader,exports.BudgetProgram=BudgetProgram,exports.Connection=Connection,exports.Loader=Loader,exports.NativeLoader=NativeLoader,exports.PublicKey=PublicKey,exports.SystemProgram=SystemProgram,exports.Token=Token,exports.TokenAmount=TokenAmount,exports.Transaction=Transaction,exports.TransactionInstruction=TransactionInstruction,exports.sendAndConfirmTransaction=sendAndConfirmTransaction,exports.sendAndConfirmRawTransaction=sendAndConfirmRawTransaction;
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _interopDefault(ex){return ex&&typeof ex==="object"&&"default"in ex?ex["default"]:ex}var nacl=_interopDefault(require("tweetnacl"));var bs58=_interopDefault(require("bs58"));var _Object$keys=_interopDefault(require("babel-runtime/core-js/object/keys"));var url=require("url");var fetch=_interopDefault(require("node-fetch"));var jayson=_interopDefault(require("jayson/lib/client/browser"));var superstruct=require("superstruct");var rpcWebsockets=require("rpc-websockets");var _Promise=_interopDefault(require("babel-runtime/core-js/promise"));var _getIterator=_interopDefault(require("babel-runtime/core-js/get-iterator"));var _JSON$stringify=_interopDefault(require("babel-runtime/core-js/json/stringify"));var _Object$assign=_interopDefault(require("babel-runtime/core-js/object/assign"));var _toConsumableArray=_interopDefault(require("babel-runtime/helpers/toConsumableArray"));var _Object$getPrototypeOf=_interopDefault(require("babel-runtime/core-js/object/get-prototype-of"));var _classCallCheck=_interopDefault(require("babel-runtime/helpers/classCallCheck"));var _createClass=_interopDefault(require("babel-runtime/helpers/createClass"));var _possibleConstructorReturn=_interopDefault(require("babel-runtime/helpers/possibleConstructorReturn"));var _get=_interopDefault(require("babel-runtime/helpers/get"));var _inherits=_interopDefault(require("babel-runtime/helpers/inherits"));var assert=_interopDefault(require("assert"));var BN=_interopDefault(require("bn.js"));var BufferLayout=require("buffer-layout");var _regeneratorRuntime=_interopDefault(require("babel-runtime/regenerator"));var _asyncToGenerator=_interopDefault(require("babel-runtime/helpers/asyncToGenerator"));var PublicKey=function(){function PublicKey(value){_classCallCheck(this,PublicKey);if(typeof value==="string"){if(value.startsWith("0x")){this._bn=new BN(value.substring(2),16)}else{this._bn=new BN(bs58.decode(value))}}else{this._bn=new BN(value)}if(this._bn.byteLength()>32){throw new Error("Invalid public key input")}}_createClass(PublicKey,[{key:"equals",value:function equals(publicKey){return this._bn.eq(publicKey._bn)}},{key:"toBase58",value:function toBase58(){return bs58.encode(this.toBuffer())}},{key:"toBuffer",value:function toBuffer(){var b=this._bn.toArrayLike(Buffer);if(b.length===32){return b}var zeroPad=Buffer.alloc(32);b.copy(zeroPad,32-b.length);return zeroPad}},{key:"toString",value:function toString(){return this.toBase58()}}],[{key:"isPublicKey",value:function isPublicKey(o){return o instanceof PublicKey}}]);return PublicKey}();var Account=function(){function Account(){var secretKey=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;_classCallCheck(this,Account);if(secretKey){this._keypair=nacl.sign.keyPair.fromSecretKey(secretKey)}else{this._keypair=nacl.sign.keyPair()}}_createClass(Account,[{key:"publicKey",get:function get(){return new PublicKey(this._keypair.publicKey)}},{key:"secretKey",get:function get(){return this._keypair.secretKey}}]);return Account}();var publicKey=function publicKey(){var property=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"publicKey";return BufferLayout.blob(32,property)};var uint64=function uint64(){var property=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"uint64";return BufferLayout.blob(8,property)};var rustString=function rustString(){var property=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"string";var rsl=BufferLayout.struct([BufferLayout.u32("length"),BufferLayout.u32("lengthPadding"),BufferLayout.blob(BufferLayout.offset(BufferLayout.u32(),-8),"chars")],property);var _decode=rsl.decode.bind(rsl);var _encode=rsl.encode.bind(rsl);rsl.decode=function(buffer,offset){var data=_decode(buffer,offset);return data.chars.toString("utf8")};rsl.encode=function(str,buffer,offset){var data={chars:Buffer.from(str,"utf8")};return _encode(data,buffer,offset)};return rsl};var PACKET_DATA_SIZE=512;var TransactionInstruction=function TransactionInstruction(opts){_classCallCheck(this,TransactionInstruction);this.keys=[];this.userdata=Buffer.alloc(0);opts&&_Object$assign(this,opts)};var Transaction=function(){_createClass(Transaction,[{key:"signature",get:function get(){if(this.signatures.length>0){return this.signatures[0].signature}return null}}]);function Transaction(opts){_classCallCheck(this,Transaction);this.signatures=[];this.instructions=[];this.fee=1;opts&&_Object$assign(this,opts)}_createClass(Transaction,[{key:"add",value:function add(){var _this=this;for(var _len=arguments.length,items=Array(_len),_key=0;_key<_len;_key++){items[_key]=arguments[_key]}if(items.length===0){throw new Error("No instructions")}items.forEach(function(item){if(item instanceof Transaction){_this.instructions=_this.instructions.concat(item.instructions)}else{_this.instructions.push(new TransactionInstruction(item))}});return this}},{key:"_getSignData",value:function _getSignData(){var lastId=this.lastId;if(!lastId){throw new Error("Transaction lastId required")}if(this.instructions.length<1){throw new Error("No instructions provided")}var keys=this.signatures.map(function(_ref){var publicKey$$1=_ref.publicKey;return publicKey$$1.toString()});var programIds=[];this.instructions.forEach(function(instruction){var programId=instruction.programId.toString();if(!programIds.includes(programId)){programIds.push(programId)}instruction.keys.map(function(key){return key.toString()}).forEach(function(key){if(!keys.includes(key)){keys.push(key)}})});var instructions=this.instructions.map(function(instruction){var userdata=instruction.userdata,programId=instruction.programId;return{programIdIndex:programIds.indexOf(programId.toString()),keyIndices:instruction.keys.map(function(key){return keys.indexOf(key.toString())}),userdata:userdata}});instructions.forEach(function(instruction){assert(instruction.programIdIndex>=0);instruction.keyIndices.forEach(function(keyIndex){return assert(keyIndex>=0)})});var instructionLayout=BufferLayout.struct([BufferLayout.u8("programIdIndex"),BufferLayout.u32("keyIndicesLength"),BufferLayout.u32("keyIndicesLengthPadding"),BufferLayout.seq(BufferLayout.u8("keyIndex"),BufferLayout.offset(BufferLayout.u32(),-8),"keyIndices"),BufferLayout.u32("userdataLength"),BufferLayout.u32("userdataLengthPadding"),BufferLayout.seq(BufferLayout.u8("userdatum"),BufferLayout.offset(BufferLayout.u32(),-8),"userdata")]);var signDataLayout=BufferLayout.struct([BufferLayout.u32("keysLength"),BufferLayout.u32("keysLengthPadding"),BufferLayout.seq(publicKey("key"),BufferLayout.offset(BufferLayout.u32(),-8),"keys"),publicKey("lastId"),BufferLayout.ns64("fee"),BufferLayout.u32("programIdsLength"),BufferLayout.u32("programIdsLengthPadding"),BufferLayout.seq(publicKey("programId"),BufferLayout.offset(BufferLayout.u32(),-8),"programIds"),BufferLayout.u32("instructionsLength"),BufferLayout.u32("instructionsLengthPadding"),BufferLayout.seq(instructionLayout,BufferLayout.offset(BufferLayout.u32(),-8),"instructions")]);var transaction={keys:keys.map(function(key){return new PublicKey(key).toBuffer()}),lastId:Buffer.from(bs58.decode(lastId)),fee:this.fee,programIds:programIds.map(function(programId){return new PublicKey(programId).toBuffer()}),instructions:instructions};var signData=Buffer.alloc(2048);var length=signDataLayout.encode(transaction,signData);signData=signData.slice(0,length);return signData}},{key:"sign",value:function sign(){this.signPartial.apply(this,arguments)}},{key:"signPartial",value:function signPartial(){for(var _len2=arguments.length,partialSigners=Array(_len2),_key2=0;_key2<_len2;_key2++){partialSigners[_key2]=arguments[_key2]}if(partialSigners.length===0){throw new Error("No signers")}var signatures=partialSigners.map(function(accountOrPublicKey){var publicKey$$1=accountOrPublicKey instanceof Account?accountOrPublicKey.publicKey:accountOrPublicKey;return{signature:null,publicKey:publicKey$$1}});this.signatures=signatures;var signData=this._getSignData();partialSigners.forEach(function(accountOrPublicKey,index){if(accountOrPublicKey instanceof PublicKey){return}var signature=nacl.sign.detached(signData,accountOrPublicKey.secretKey);assert(signature.length===64);signatures[index].signature=signature})}},{key:"addSigner",value:function addSigner(signer){var index=this.signatures.findIndex(function(sigpair){return signer.publicKey.equals(sigpair.publicKey)});if(index<0){throw new Error("Unknown signer: "+signer.publicKey.toString())}var signData=this._getSignData();var signature=nacl.sign.detached(signData,signer.secretKey);assert(signature.length===64);this.signatures[index].signature=signature}},{key:"serialize",value:function serialize(){var signatures=this.signatures;if(!signatures){throw new Error("Transaction has not been signed")}var signData=this._getSignData();var wireTransaction=Buffer.alloc(8+signatures.length*64+signData.length);assert(signatures.length<256);wireTransaction.writeUInt8(signatures.length,0);signatures.forEach(function(_ref2,index){var signature=_ref2.signature;assert(signature!==null,"null signature");assert(signature.length===64,"signature has invalid length");Buffer.from(signature).copy(wireTransaction,8+index*64)});signData.copy(wireTransaction,8+signatures.length*64);assert(wireTransaction.length<=PACKET_DATA_SIZE,"Transaction too large: "+wireTransaction.length+" > "+PACKET_DATA_SIZE);return wireTransaction}},{key:"keys",get:function get(){assert(this.instructions.length===1);return this.instructions[0].keys}},{key:"programId",get:function get(){assert(this.instructions.length===1);return this.instructions[0].programId}},{key:"userdata",get:function get(){assert(this.instructions.length===1);return this.instructions[0].userdata}}]);return Transaction}();var SystemProgram=function(){function SystemProgram(){_classCallCheck(this,SystemProgram)}_createClass(SystemProgram,null,[{key:"createAccount",value:function createAccount(from,newAccount,tokens,space,programId){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),BufferLayout.ns64("tokens"),BufferLayout.ns64("space"),publicKey("programId")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:0,tokens:tokens,space:space,programId:programId.toBuffer()},userdata);return(new Transaction).add({keys:[from,newAccount],programId:SystemProgram.programId,userdata:userdata})}},{key:"move",value:function move(from,to,amount){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),BufferLayout.ns64("amount")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:2,amount:amount},userdata);return(new Transaction).add({keys:[from,to],programId:SystemProgram.programId,userdata:userdata})}},{key:"assign",value:function assign(from,programId){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),publicKey("programId")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:1,programId:programId.toBuffer()},userdata);return(new Transaction).add({keys:[from],programId:SystemProgram.programId,userdata:userdata})}},{key:"spawn",value:function spawn(programId){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:3},userdata);return(new Transaction).add({keys:[programId],programId:SystemProgram.programId,userdata:userdata})}},{key:"programId",get:function get(){return new PublicKey("0x000000000000000000000000000000000000000000000000000000000000000")}}]);return SystemProgram}();function sleep(ms){return new _Promise(function(resolve){return setTimeout(resolve,ms)})}function createRpcRequest(url$$1){var _this=this;var server=jayson(function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(request,callback){var options,res,text;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:options={method:"POST",body:request,headers:{"Content-Type":"application/json"}};_context.prev=1;_context.next=4;return fetch(url$$1,options);case 4:res=_context.sent;_context.next=7;return res.text();case 7:text=_context.sent;callback(null,text);_context.next=14;break;case 11:_context.prev=11;_context.t0=_context["catch"](1);callback(_context.t0);case 14:case"end":return _context.stop()}}},_callee,_this,[[1,11]])}));return function(_x,_x2){return _ref.apply(this,arguments)}}());return function(method,args){return new _Promise(function(resolve,reject){server.request(method,args,function(err,response){if(err){reject(err);return}resolve(response)})})}}var GetBalanceRpcResult=superstruct.struct({jsonrpc:superstruct.struct.literal("2.0"),id:"string",error:"any?",result:"number?"});function jsonRpcResult(resultDescription){var jsonRpcVersion=superstruct.struct.literal("2.0");return superstruct.struct.union([superstruct.struct({jsonrpc:jsonRpcVersion,id:"string",error:"any"}),superstruct.struct({jsonrpc:jsonRpcVersion,id:"string",error:"null?",result:resultDescription})])}var AccountInfoResult=superstruct.struct({executable:"boolean",loader:"array",owner:"array",tokens:"number",userdata:"array"});var GetAccountInfoRpcResult=jsonRpcResult(AccountInfoResult);var AccountNotificationResult=superstruct.struct({subscription:"number",result:AccountInfoResult});var ConfirmTransactionRpcResult=jsonRpcResult("boolean");var GetSignatureStatusRpcResult=jsonRpcResult(superstruct.struct.enum(["AccountInUse","Confirmed","GenericFailure","ProgramRuntimeError","SignatureNotFound"]));var GetTransactionCountRpcResult=jsonRpcResult("number");var GetLastId=jsonRpcResult("string");var GetFinalityRpcResult=jsonRpcResult("number");var RequestAirdropRpcResult=jsonRpcResult("string");var SendTransactionRpcResult=jsonRpcResult("string");var Connection=function(){function Connection(endpoint){_classCallCheck(this,Connection);this._rpcWebSocketConnected=false;this._disableLastIdCaching=false;this._accountChangeSubscriptions={};this._accountChangeSubscriptionCounter=0;var url$$1=url.parse(endpoint);this._rpcRequest=createRpcRequest(url$$1.href);this._lastIdInfo={lastId:null,seconds:-1,transactionSignatures:[]};url$$1.protocol=url$$1.protocol==="https:"?"wss:":"ws:";url$$1.host="";url$$1.port=String(Number(url$$1.port)+1);if(url$$1.port==="1"){url$$1.port=url$$1.protocol==="wss:"?"8901":"8900"}this._rpcWebSocket=new rpcWebsockets.Client(url.format(url$$1),{autoconnect:false,max_reconnects:Infinity});this._rpcWebSocket.on("open",this._wsOnOpen.bind(this));this._rpcWebSocket.on("error",this._wsOnError.bind(this));this._rpcWebSocket.on("close",this._wsOnClose.bind(this));this._rpcWebSocket.on("accountNotification",this._wsOnAccountNotification.bind(this))}_createClass(Connection,[{key:"getBalance",value:function(){var _ref2=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(publicKey){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:_context2.next=2;return this._rpcRequest("getBalance",[publicKey.toBase58()]);case 2:unsafeRes=_context2.sent;res=GetBalanceRpcResult(unsafeRes);if(!res.error){_context2.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context2.abrupt("return",res.result);case 8:case"end":return _context2.stop()}}},_callee2,this)}));function getBalance(_x3){return _ref2.apply(this,arguments)}return getBalance}()},{key:"getAccountInfo",value:function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(publicKey){var unsafeRes,res,result;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:_context3.next=2;return this._rpcRequest("getAccountInfo",[publicKey.toBase58()]);case 2:unsafeRes=_context3.sent;res=GetAccountInfoRpcResult(unsafeRes);if(!res.error){_context3.next=6;break}throw new Error(res.error.message);case 6:result=res.result;assert(typeof result!=="undefined");return _context3.abrupt("return",{executable:result.executable,loader:new PublicKey(result.loader),owner:new PublicKey(result.owner),tokens:result.tokens,userdata:Buffer.from(result.userdata)});case 9:case"end":return _context3.stop()}}},_callee3,this)}));function getAccountInfo(_x4){return _ref3.apply(this,arguments)}return getAccountInfo}()},{key:"confirmTransaction",value:function(){var _ref4=_asyncToGenerator(_regeneratorRuntime.mark(function _callee4(signature){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:_context4.next=2;return this._rpcRequest("confirmTransaction",[signature]);case 2:unsafeRes=_context4.sent;res=ConfirmTransactionRpcResult(unsafeRes);if(!res.error){_context4.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context4.abrupt("return",res.result);case 8:case"end":return _context4.stop()}}},_callee4,this)}));function confirmTransaction(_x5){return _ref4.apply(this,arguments)}return confirmTransaction}()},{key:"getSignatureStatus",value:function(){var _ref5=_asyncToGenerator(_regeneratorRuntime.mark(function _callee5(signature){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:_context5.next=2;return this._rpcRequest("getSignatureStatus",[signature]);case 2:unsafeRes=_context5.sent;res=GetSignatureStatusRpcResult(unsafeRes);if(!res.error){_context5.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context5.abrupt("return",res.result);case 8:case"end":return _context5.stop()}}},_callee5,this)}));function getSignatureStatus(_x6){return _ref5.apply(this,arguments)}return getSignatureStatus}()},{key:"getTransactionCount",value:function(){var _ref6=_asyncToGenerator(_regeneratorRuntime.mark(function _callee6(){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:_context6.next=2;return this._rpcRequest("getTransactionCount",[]);case 2:unsafeRes=_context6.sent;res=GetTransactionCountRpcResult(unsafeRes);if(!res.error){_context6.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context6.abrupt("return",Number(res.result));case 8:case"end":return _context6.stop()}}},_callee6,this)}));function getTransactionCount(){return _ref6.apply(this,arguments)}return getTransactionCount}()},{key:"getLastId",value:function(){var _ref7=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:_context7.next=2;return this._rpcRequest("getLastId",[]);case 2:unsafeRes=_context7.sent;res=GetLastId(unsafeRes);if(!res.error){_context7.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context7.abrupt("return",res.result);case 8:case"end":return _context7.stop()}}},_callee7,this)}));function getLastId(){return _ref7.apply(this,arguments)}return getLastId}()},{key:"getFinality",value:function(){var _ref8=_asyncToGenerator(_regeneratorRuntime.mark(function _callee8(){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:_context8.next=2;return this._rpcRequest("getFinality",[]);case 2:unsafeRes=_context8.sent;res=GetFinalityRpcResult(unsafeRes);if(!res.error){_context8.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context8.abrupt("return",Number(res.result));case 8:case"end":return _context8.stop()}}},_callee8,this)}));function getFinality(){return _ref8.apply(this,arguments)}return getFinality}()},{key:"requestAirdrop",value:function(){var _ref9=_asyncToGenerator(_regeneratorRuntime.mark(function _callee9(to,amount){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee9$(_context9){while(1){switch(_context9.prev=_context9.next){case 0:_context9.next=2;return this._rpcRequest("requestAirdrop",[to.toBase58(),amount]);case 2:unsafeRes=_context9.sent;res=RequestAirdropRpcResult(unsafeRes);if(!res.error){_context9.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context9.abrupt("return",res.result);case 8:case"end":return _context9.stop()}}},_callee9,this)}));function requestAirdrop(_x7,_x8){return _ref9.apply(this,arguments)}return requestAirdrop}()},{key:"sendTransaction",value:function(){var _ref10=_asyncToGenerator(_regeneratorRuntime.mark(function _callee10(transaction){for(var _len=arguments.length,signers=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){signers[_key-1]=arguments[_key]}var _seconds,signature,attempts,startTime,_lastId,wireTransaction;return _regeneratorRuntime.wrap(function _callee10$(_context10){while(1){switch(_context10.prev=_context10.next){case 0:_seconds=(new Date).getSeconds();if(!(this._lastIdInfo.lastId!=null&&this._lastIdInfo.seconds===_seconds)){_context10.next=11;break}transaction.lastId=this._lastIdInfo.lastId;transaction.sign.apply(transaction,signers);if(transaction.signature){_context10.next=6;break}throw new Error("!signature");case 6:signature=transaction.signature.toString();if(this._lastIdInfo.transactionSignatures.includes(signature)){_context10.next=11;break}this._lastIdInfo.transactionSignatures.push(signature);if(this._disableLastIdCaching){this._lastIdInfo.seconds=-1}return _context10.abrupt("break",28);case 11:attempts=0;startTime=Date.now();case 13:_context10.next=15;return this.getLastId();case 15:_lastId=_context10.sent;if(!(this._lastIdInfo.lastId!=_lastId)){_context10.next=19;break}this._lastIdInfo={lastId:_lastId,seconds:(new Date).getSeconds(),transactionSignatures:[]};return _context10.abrupt("break",26);case 19:if(!(attempts===8)){_context10.next=21;break}throw new Error("Unable to obtain a new last id after "+(Date.now()-startTime)+"ms");case 21:_context10.next=23;return sleep(250);case 23:++attempts;case 24:_context10.next=13;break;case 26:_context10.next=0;break;case 28:wireTransaction=transaction.serialize();_context10.next=31;return this.sendRawTransaction(wireTransaction);case 31:return _context10.abrupt("return",_context10.sent);case 32:case"end":return _context10.stop()}}},_callee10,this)}));function sendTransaction(_x9){return _ref10.apply(this,arguments)}return sendTransaction}()},{key:"sendRawTransaction",value:function(){var _ref11=_asyncToGenerator(_regeneratorRuntime.mark(function _callee11(rawTransaction){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee11$(_context11){while(1){switch(_context11.prev=_context11.next){case 0:_context11.next=2;return this._rpcRequest("sendTransaction",[[].concat(_toConsumableArray(rawTransaction))]);case 2:unsafeRes=_context11.sent;res=SendTransactionRpcResult(unsafeRes);if(!res.error){_context11.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");assert(res.result);return _context11.abrupt("return",res.result);case 9:case"end":return _context11.stop()}}},_callee11,this)}));function sendRawTransaction(_x10){return _ref11.apply(this,arguments)}return sendRawTransaction}()},{key:"_wsOnOpen",value:function _wsOnOpen(){this._rpcWebSocketConnected=true;this._updateSubscriptions()}},{key:"_wsOnError",value:function _wsOnError(err){console.log("ws error:",err.message)}},{key:"_wsOnClose",value:function _wsOnClose(code,message){if(code!==1e3){console.log("ws close:",code,message)}this._rpcWebSocketConnected=false}},{key:"_wsOnAccountNotification",value:function _wsOnAccountNotification(notification){var res=AccountNotificationResult(notification);if(res.error){throw new Error(res.error.message)}var keys=_Object$keys(this._accountChangeSubscriptions).map(Number);var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=_getIterator(keys),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var id=_step.value;var sub=this._accountChangeSubscriptions[id];if(sub.subscriptionId===res.subscription){var result=res.result;assert(typeof result!=="undefined");sub.callback({executable:result.executable,loader:new PublicKey(result.loader),owner:new PublicKey(result.owner),tokens:result.tokens,userdata:Buffer.from(result.userdata)});return true}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}},{key:"_updateSubscriptions",value:function(){var _ref12=_asyncToGenerator(_regeneratorRuntime.mark(function _callee12(){var keys,_iteratorNormalCompletion2,_didIteratorError2,_iteratorError2,_iterator2,_step2,id,_iteratorNormalCompletion3,_didIteratorError3,_iteratorError3,_iterator3,_step3,_id,_accountChangeSubscri,_subscriptionId,_publicKey;return _regeneratorRuntime.wrap(function _callee12$(_context12){while(1){switch(_context12.prev=_context12.next){case 0:keys=_Object$keys(this._accountChangeSubscriptions).map(Number);if(!(keys.length===0)){_context12.next=4;break}this._rpcWebSocket.close();return _context12.abrupt("return");case 4:if(this._rpcWebSocketConnected){_context12.next=26;break}_iteratorNormalCompletion2=true;_didIteratorError2=false;_iteratorError2=undefined;_context12.prev=8;for(_iterator2=_getIterator(keys);!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){id=_step2.value;this._accountChangeSubscriptions[id].subscriptionId=null}_context12.next=16;break;case 12:_context12.prev=12;_context12.t0=_context12["catch"](8);_didIteratorError2=true;_iteratorError2=_context12.t0;case 16:_context12.prev=16;_context12.prev=17;if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}case 19:_context12.prev=19;if(!_didIteratorError2){_context12.next=22;break}throw _iteratorError2;case 22:return _context12.finish(19);case 23:return _context12.finish(16);case 24:this._rpcWebSocket.connect();return _context12.abrupt("return");case 26:_iteratorNormalCompletion3=true;_didIteratorError3=false;_iteratorError3=undefined;_context12.prev=29;_iterator3=_getIterator(keys);case 31:if(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done){_context12.next=47;break}_id=_step3.value;_accountChangeSubscri=this._accountChangeSubscriptions[_id],_subscriptionId=_accountChangeSubscri.subscriptionId,_publicKey=_accountChangeSubscri.publicKey;if(!(_subscriptionId===null)){_context12.next=44;break}_context12.prev=35;_context12.next=38;return this._rpcWebSocket.call("accountSubscribe",[_publicKey]);case 38:this._accountChangeSubscriptions[_id].subscriptionId=_context12.sent;_context12.next=44;break;case 41:_context12.prev=41;_context12.t1=_context12["catch"](35);console.log("accountSubscribe error for "+_publicKey+": "+_context12.t1.message);case 44:_iteratorNormalCompletion3=true;_context12.next=31;break;case 47:_context12.next=53;break;case 49:_context12.prev=49;_context12.t2=_context12["catch"](29);_didIteratorError3=true;_iteratorError3=_context12.t2;case 53:_context12.prev=53;_context12.prev=54;if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}case 56:_context12.prev=56;if(!_didIteratorError3){_context12.next=59;break}throw _iteratorError3;case 59:return _context12.finish(56);case 60:return _context12.finish(53);case 61:case"end":return _context12.stop()}}},_callee12,this,[[8,12,16,24],[17,,19,23],[29,49,53,61],[35,41],[54,,56,60]])}));function _updateSubscriptions(){return _ref12.apply(this,arguments)}return _updateSubscriptions}()},{key:"onAccountChange",value:function onAccountChange(publicKey,callback){var id=++this._accountChangeSubscriptionCounter;this._accountChangeSubscriptions[id]={publicKey:publicKey.toBase58(),callback:callback,subscriptionId:null};this._updateSubscriptions();return id}},{key:"removeAccountChangeListener",value:function(){var _ref13=_asyncToGenerator(_regeneratorRuntime.mark(function _callee13(id){var _subscriptionId2;return _regeneratorRuntime.wrap(function _callee13$(_context13){while(1){switch(_context13.prev=_context13.next){case 0:if(!this._accountChangeSubscriptions[id]){_context13.next=15;break}_subscriptionId2=this._accountChangeSubscriptions[id].subscriptionId;delete this._accountChangeSubscriptions[id];if(!(_subscriptionId2!==null)){_context13.next=12;break}_context13.prev=4;_context13.next=7;return this._rpcWebSocket.call("accountUnsubscribe",[_subscriptionId2]);case 7:_context13.next=12;break;case 9:_context13.prev=9;_context13.t0=_context13["catch"](4);console.log("accountUnsubscribe error:",_context13.t0.message);case 12:this._updateSubscriptions();_context13.next=16;break;case 15:throw new Error("Unknown account change id: "+id);case 16:case"end":return _context13.stop()}}},_callee13,this,[[4,9]])}));function removeAccountChangeListener(_x11){return _ref13.apply(this,arguments)}return removeAccountChangeListener}()}]);return Connection}();var sendAndConfirmTransaction=function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,transaction){for(var _len=arguments.length,signers=Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){signers[_key-2]=arguments[_key]}var sendRetries,signature,start,status,statusRetries,duration;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:sendRetries=10;signature=void 0;case 2:start=Date.now();_context.next=5;return connection.sendTransaction.apply(connection,[transaction].concat(signers));case 5:signature=_context.sent;status="SignatureNotFound";statusRetries=4;case 8:_context.next=10;return connection.getSignatureStatus(signature);case 10:status=_context.sent;if(!(status!=="SignatureNotFound")){_context.next=13;break}return _context.abrupt("break",20);case 13:_context.next=15;return sleep(500);case 15:if(!(--statusRetries<=0)){_context.next=18;break}duration=(Date.now()-start)/1e3;throw new Error("Transaction '"+signature+"' was not confirmed in "+duration.toFixed(2)+" seconds ("+status+")");case 18:_context.next=8;break;case 20:if(!(status==="Confirmed")){_context.next=22;break}return _context.abrupt("break",28);case 22:if(!(status!=="AccountInUse"||--sendRetries<=0)){_context.next=24;break}throw new Error("Transaction "+signature+" failed ("+status+")");case 24:_context.next=26;return sleep(Math.random()*100);case 26:_context.next=2;break;case 28:assert(signature!==undefined);return _context.abrupt("return",signature);case 30:case"end":return _context.stop()}}},_callee,this)}));return function sendAndConfirmTransaction(_x,_x2){return _ref.apply(this,arguments)}}();var Loader=function(){_createClass(Loader,null,[{key:"chunkSize",get:function get(){return 256}}]);function Loader(connection,programId){_classCallCheck(this,Loader);_Object$assign(this,{connection:connection,programId:programId})}_createClass(Loader,[{key:"load",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(program,data){var userdataLayout,chunkSize,offset,array,transactions,bytes,userdata,transaction;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),BufferLayout.u32("offset"),BufferLayout.u32("bytesLength"),BufferLayout.u32("bytesLengthPadding"),BufferLayout.seq(BufferLayout.u8("byte"),BufferLayout.offset(BufferLayout.u32(),-8),"bytes")]);chunkSize=Loader.chunkSize;offset=0;array=data;transactions=[];case 5:if(!(array.length>0)){_context.next=19;break}bytes=array.slice(0,chunkSize);userdata=Buffer.alloc(chunkSize+16);userdataLayout.encode({instruction:0,offset:offset,bytes:bytes},userdata);transaction=(new Transaction).add({keys:[program.publicKey],programId:this.programId,userdata:userdata});transactions.push(sendAndConfirmTransaction(this.connection,transaction,program));if(!(transactions.length===8)){_context.next=15;break}_context.next=14;return _Promise.all(transactions);case 14:transactions=[];case 15:offset+=chunkSize;array=array.slice(chunkSize);_context.next=5;break;case 19:_context.next=21;return _Promise.all(transactions);case 21:case"end":return _context.stop()}}},_callee,this)}));function load(_x,_x2){return _ref.apply(this,arguments)}return load}()},{key:"finalize",value:function(){var _ref2=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(program){var userdataLayout,userdata,transaction;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction")]);userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:1},userdata);transaction=new Transaction;transaction.add({keys:[program.publicKey],programId:this.programId,userdata:userdata});transaction.add(SystemProgram.spawn(program.publicKey));_context2.next=8;return sendAndConfirmTransaction(this.connection,transaction,program);case 8:case"end":return _context2.stop()}}},_callee2,this)}));function finalize(_x3){return _ref2.apply(this,arguments)}return finalize}()}]);return Loader}();var BpfLoader=function(){function BpfLoader(){_classCallCheck(this,BpfLoader)}_createClass(BpfLoader,null,[{key:"load",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,owner,elf){var programAccount,transaction,loader;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:programAccount=new Account;transaction=SystemProgram.createAccount(owner.publicKey,programAccount.publicKey,1+Math.ceil(elf.length/Loader.chunkSize)+1,elf.length,BpfLoader.programId);_context.next=4;return sendAndConfirmTransaction(connection,transaction,owner);case 4:loader=new Loader(connection,BpfLoader.programId);_context.next=7;return loader.load(programAccount,elf);case 7:_context.next=9;return loader.finalize(programAccount);case 9:return _context.abrupt("return",programAccount.publicKey);case 10:case"end":return _context.stop()}}},_callee,this)}));function load(_x,_x2,_x3){return _ref.apply(this,arguments)}return load}()},{key:"programId",get:function get(){return new PublicKey("0x8000000000000000000000000000000000000000000000000000000000000000")}}]);return BpfLoader}();function serializePayment(payment){var toData=payment.to.toBuffer();var userdata=Buffer.alloc(8+toData.length);userdata.writeUInt32LE(payment.amount,0);toData.copy(userdata,8);return userdata}function serializeDate(when){var userdata=Buffer.alloc(8+20);userdata.writeUInt32LE(20,0);function iso(date){function pad(number){if(number<10){return"0"+number}return number}return date.getUTCFullYear()+"-"+pad(date.getUTCMonth()+1)+"-"+pad(date.getUTCDate())+"T"+pad(date.getUTCHours())+":"+pad(date.getUTCMinutes())+":"+pad(date.getUTCSeconds())+"Z"}userdata.write(iso(when),8);return userdata}function serializeCondition(condition){switch(condition.type){case"timestamp":{var date=serializeDate(condition.when);var _from=condition.from.toBuffer();var userdata=Buffer.alloc(4+date.length+_from.length);userdata.writeUInt32LE(0,0);date.copy(userdata,4);_from.copy(userdata,4+date.length);return userdata}case"signature":{var userdataLayout=BufferLayout.struct([BufferLayout.u32("condition"),publicKey("from")]);var _from2=condition.from.toBuffer();var _userdata=Buffer.alloc(4+_from2.length);userdataLayout.encode({instruction:1,from:_from2},_userdata);return _userdata}default:throw new Error("Unknown condition type: "+condition.type)}}var BudgetProgram=function(){function BudgetProgram(){_classCallCheck(this,BudgetProgram)}_createClass(BudgetProgram,null,[{key:"timestampCondition",value:function timestampCondition(from,when){return{type:"timestamp",from:from,when:when}}},{key:"signatureCondition",value:function signatureCondition(from){return{type:"signature",from:from}}},{key:"pay",value:function pay(from,program,to,amount){var userdata=Buffer.alloc(1024);var pos=0;userdata.writeUInt32LE(0,pos);pos+=4;for(var _len=arguments.length,conditions=Array(_len>4?_len-4:0),_key=4;_key<_len;_key++){conditions[_key-4]=arguments[_key]}switch(conditions.length){case 0:userdata.writeUInt32LE(0,pos);pos+=4;{var payment=serializePayment({amount:amount,to:to});payment.copy(userdata,pos);pos+=payment.length}return(new Transaction).add({keys:[from,to],programId:this.programId,userdata:userdata.slice(0,pos)});case 1:userdata.writeUInt32LE(1,pos);pos+=4;{var condition=conditions[0];var conditionData=serializeCondition(condition);conditionData.copy(userdata,pos);pos+=conditionData.length;var paymentData=serializePayment({amount:amount,to:to});paymentData.copy(userdata,pos);pos+=paymentData.length}return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata.slice(0,pos)});case 2:userdata.writeUInt32LE(2,pos);pos+=4;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=_getIterator(conditions),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _condition=_step.value;var _conditionData=serializeCondition(_condition);_conditionData.copy(userdata,pos);pos+=_conditionData.length;var _paymentData=serializePayment({amount:amount,to:to});_paymentData.copy(userdata,pos);pos+=_paymentData.length}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata.slice(0,pos)});default:throw new Error("A maximum of two conditions are support: "+conditions.length+" provided")}}},{key:"payOnBoth",value:function payOnBoth(from,program,to,amount,condition1,condition2){var userdata=Buffer.alloc(1024);var pos=0;userdata.writeUInt32LE(0,pos);pos+=4;userdata.writeUInt32LE(3,pos);pos+=4;var _arr=[condition1,condition2];for(var _i=0;_i<_arr.length;_i++){var condition=_arr[_i];var conditionData=serializeCondition(condition);conditionData.copy(userdata,pos);pos+=conditionData.length}var paymentData=serializePayment({amount:amount,to:to});paymentData.copy(userdata,pos);pos+=paymentData.length;return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata.slice(0,pos)})}},{key:"applyTimestamp",value:function applyTimestamp(from,program,to,when){var whenData=serializeDate(when);var userdata=Buffer.alloc(4+whenData.length);userdata.writeUInt32LE(1,0);whenData.copy(userdata,4);return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata})}},{key:"applySignature",value:function applySignature(from,program,to){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:2},userdata);return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata})}},{key:"programId",get:function get(){return new PublicKey("0x8100000000000000000000000000000000000000000000000000000000000000")}},{key:"space",get:function get(){return 128}}]);return BudgetProgram}();var NativeLoader=function(){function NativeLoader(){_classCallCheck(this,NativeLoader)}_createClass(NativeLoader,null,[{key:"load",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,owner,programName){var bytes,programAccount,transaction,loader;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:bytes=[].concat(_toConsumableArray(Buffer.from(programName)));programAccount=new Account;transaction=SystemProgram.createAccount(owner.publicKey,programAccount.publicKey,1+1+1,bytes.length+1,NativeLoader.programId);_context.next=5;return sendAndConfirmTransaction(connection,transaction,owner);case 5:loader=new Loader(connection,NativeLoader.programId);_context.next=8;return loader.load(programAccount,bytes);case 8:_context.next=10;return loader.finalize(programAccount);case 10:return _context.abrupt("return",programAccount.publicKey);case 11:case"end":return _context.stop()}}},_callee,this)}));function load(_x,_x2,_x3){return _ref.apply(this,arguments)}return load}()},{key:"programId",get:function get(){return new PublicKey("0x100000000000000000000000000000000000000000000000000000000000000")}}]);return NativeLoader}();var TokenAmount=function(_BN){_inherits(TokenAmount,_BN);function TokenAmount(){_classCallCheck(this,TokenAmount);return _possibleConstructorReturn(this,(TokenAmount.__proto__||_Object$getPrototypeOf(TokenAmount)).apply(this,arguments))}_createClass(TokenAmount,[{key:"toBuffer",value:function toBuffer(){var a=_get(TokenAmount.prototype.__proto__||_Object$getPrototypeOf(TokenAmount.prototype),"toArray",this).call(this).reverse();var b=Buffer.from(a);if(b.length===8){return b}assert(b.length<8,"TokenAmount too large");var zeroPad=Buffer.alloc(8);b.copy(zeroPad);return zeroPad}}],[{key:"fromBuffer",value:function fromBuffer(buffer){assert(buffer.length===8,"Invalid buffer length: "+buffer.length);return new BN([].concat(_toConsumableArray(buffer)).reverse().map(function(i){return("00"+i.toString(16)).slice(-2)}).join(""),16)}}]);return TokenAmount}(BN);var TokenInfoLayout=BufferLayout.struct([uint64("supply"),BufferLayout.u8("decimals"),rustString("name"),rustString("symbol")]);var TokenAccountInfoLayout=BufferLayout.struct([publicKey("token"),publicKey("owner"),uint64("amount"),BufferLayout.u8("sourceOption"),publicKey("source"),uint64("originalAmount")]);var SYSTEM_TOKEN_PROGRAM_ID=new PublicKey("0x8300000000000000000000000000000000000000000000000000000000000000");var Token=function(){function Token(connection,token){var programId=arguments.length>2&&arguments[2]!==undefined?arguments[2]:SYSTEM_TOKEN_PROGRAM_ID;_classCallCheck(this,Token);_Object$assign(this,{connection:connection,token:token,programId:programId})}_createClass(Token,[{key:"newAccount",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(owner){var source=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var tokenAccount,transaction,userdataLayout,userdata,keys;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:tokenAccount=new Account;transaction=void 0;userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction")]);userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:1},userdata);transaction=SystemProgram.createAccount(owner.publicKey,tokenAccount.publicKey,1,1+TokenAccountInfoLayout.span,this.programId);_context.next=8;return sendAndConfirmTransaction(this.connection,transaction,owner);case 8:keys=[tokenAccount.publicKey,owner.publicKey,this.token];if(source){keys.push(source)}transaction=(new Transaction).add({keys:keys,programId:this.programId,userdata:userdata});transaction.fee=0;_context.next=14;return sendAndConfirmTransaction(this.connection,transaction,tokenAccount);case 14:return _context.abrupt("return",tokenAccount.publicKey);case 15:case"end":return _context.stop()}}},_callee,this)}));function newAccount(_x2){return _ref.apply(this,arguments)}return newAccount}()},{key:"tokenInfo",value:function(){var _ref2=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(){var accountInfo,userdata,tokenInfo;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:_context2.next=2;return this.connection.getAccountInfo(this.token);case 2:accountInfo=_context2.sent;if(accountInfo.owner.equals(this.programId)){_context2.next=5;break}throw new Error("Invalid token owner: "+_JSON$stringify(accountInfo.owner));case 5:userdata=Buffer.from(accountInfo.userdata);if(!(userdata.readUInt8(0)!==1)){_context2.next=8;break}throw new Error("Invalid token userdata");case 8:tokenInfo=TokenInfoLayout.decode(userdata,1);tokenInfo.supply=TokenAmount.fromBuffer(tokenInfo.supply);return _context2.abrupt("return",tokenInfo);case 11:case"end":return _context2.stop()}}},_callee2,this)}));function tokenInfo(){return _ref2.apply(this,arguments)}return tokenInfo}()},{key:"accountInfo",value:function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(account){var accountInfo,userdata,tokenAccountInfo;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:_context3.next=2;return this.connection.getAccountInfo(account);case 2:accountInfo=_context3.sent;if(accountInfo.owner.equals(this.programId)){_context3.next=5;break}throw new Error("Invalid token account owner");case 5:userdata=Buffer.from(accountInfo.userdata);if(!(userdata.readUInt8(0)!==2)){_context3.next=8;break}throw new Error("Invalid token account userdata");case 8:tokenAccountInfo=TokenAccountInfoLayout.decode(userdata,1);tokenAccountInfo.token=new PublicKey(tokenAccountInfo.token);tokenAccountInfo.owner=new PublicKey(tokenAccountInfo.owner);tokenAccountInfo.amount=TokenAmount.fromBuffer(tokenAccountInfo.amount);if(tokenAccountInfo.sourceOption===0){tokenAccountInfo.source=null;tokenAccountInfo.originalAmount=new TokenAmount}else{tokenAccountInfo.source=new PublicKey(tokenAccountInfo.source);tokenAccountInfo.originalAmount=TokenAmount.fromBuffer(tokenAccountInfo.originalAmount)}if(tokenAccountInfo.token.equals(this.token)){_context3.next=15;break}throw new Error("Invalid token account token: "+_JSON$stringify(tokenAccountInfo.token)+" !== "+_JSON$stringify(this.token));case 15:return _context3.abrupt("return",tokenAccountInfo);case 16:case"end":return _context3.stop()}}},_callee3,this)}));function accountInfo(_x4){return _ref3.apply(this,arguments)}return accountInfo}()},{key:"transfer",value:function(){var _ref4=_asyncToGenerator(_regeneratorRuntime.mark(function _callee4(owner,source,destination,amount){return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:_context4.t0=sendAndConfirmTransaction;_context4.t1=this.connection;_context4.t2=new Transaction;_context4.next=5;return this.transferInstruction(owner.publicKey,source,destination,amount);case 5:_context4.t3=_context4.sent;_context4.t4=_context4.t2.add.call(_context4.t2,_context4.t3);_context4.t5=owner;_context4.next=10;return(0,_context4.t0)(_context4.t1,_context4.t4,_context4.t5);case 10:return _context4.abrupt("return",_context4.sent);case 11:case"end":return _context4.stop()}}},_callee4,this)}));function transfer(_x5,_x6,_x7,_x8){return _ref4.apply(this,arguments)}return transfer}()},{key:"approve",value:function(){var _ref5=_asyncToGenerator(_regeneratorRuntime.mark(function _callee5(owner,account,delegate,amount){return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:_context5.next=2;return sendAndConfirmTransaction(this.connection,(new Transaction).add(this.approveInstruction(owner.publicKey,account,delegate,amount)),owner);case 2:case"end":return _context5.stop()}}},_callee5,this)}));function approve(_x9,_x10,_x11,_x12){return _ref5.apply(this,arguments)}return approve}()},{key:"revoke",value:function revoke(owner,account,delegate){return this.approve(owner,account,delegate,0)}},{key:"setOwner",value:function(){var _ref6=_asyncToGenerator(_regeneratorRuntime.mark(function _callee6(owner,account,newOwner){return _regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:_context6.next=2;return sendAndConfirmTransaction(this.connection,(new Transaction).add(this.setOwnerInstruction(owner.publicKey,account,newOwner)),owner);case 2:case"end":return _context6.stop()}}},_callee6,this)}));function setOwner(_x13,_x14,_x15){return _ref6.apply(this,arguments)}return setOwner}()},{key:"transferInstruction",value:function(){var _ref7=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(owner,source,destination,amount){var accountInfo,userdataLayout,userdata,keys;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:_context7.next=2;return this.accountInfo(source);case 2:accountInfo=_context7.sent;if(owner.equals(accountInfo.owner)){_context7.next=5;break}throw new Error("Account owner mismatch");case 5:userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),uint64("amount")]);userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:2,amount:new TokenAmount(amount).toBuffer()},userdata);keys=[owner,source,destination];if(accountInfo.source){keys.push(accountInfo.source)}return _context7.abrupt("return",new TransactionInstruction({keys:keys,programId:this.programId,userdata:userdata}));case 11:case"end":return _context7.stop()}}},_callee7,this)}));function transferInstruction(_x16,_x17,_x18,_x19){return _ref7.apply(this,arguments)}return transferInstruction}()},{key:"approveInstruction",value:function approveInstruction(owner,account,delegate,amount){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),uint64("amount")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:3,amount:new TokenAmount(amount).toBuffer()},userdata);return new TransactionInstruction({keys:[owner,account,delegate],programId:this.programId,userdata:userdata})}},{key:"revokeInstruction",value:function revokeInstruction(owner,account,delegate){return this.approveInstruction(owner,account,delegate,0)}},{key:"setOwnerInstruction",value:function setOwnerInstruction(owner,account,newOwner){var userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:4},userdata);return new TransactionInstruction({keys:[owner,account,newOwner],programId:this.programId,userdata:userdata})}}],[{key:"createNewToken",value:function(){var _ref8=_asyncToGenerator(_regeneratorRuntime.mark(function _callee8(connection,owner,supply,name,symbol,decimals){var programId=arguments.length>6&&arguments[6]!==undefined?arguments[6]:SYSTEM_TOKEN_PROGRAM_ID;var tokenAccount,token,initialAccountPublicKey,transaction,userdataLayout,userdata,encodeLength;return _regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:tokenAccount=new Account;token=new Token(connection,tokenAccount.publicKey,programId);_context8.next=4;return token.newAccount(owner,null);case 4:initialAccountPublicKey=_context8.sent;transaction=void 0;userdataLayout=BufferLayout.struct([BufferLayout.u32("instruction"),uint64("supply"),BufferLayout.u8("decimals"),rustString("name"),rustString("symbol")]);userdata=Buffer.alloc(1024);encodeLength=userdataLayout.encode({instruction:0,supply:supply.toBuffer(),decimals:decimals,name:name,symbol:symbol},userdata);userdata=userdata.slice(0,encodeLength);transaction=SystemProgram.createAccount(owner.publicKey,tokenAccount.publicKey,1,1+userdata.length,programId);_context8.next=13;return sendAndConfirmTransaction(connection,transaction,owner);case 13:transaction=(new Transaction).add({keys:[tokenAccount.publicKey,initialAccountPublicKey],programId:programId,userdata:userdata});transaction.fee=0;_context8.next=17;return sendAndConfirmTransaction(connection,transaction,tokenAccount);case 17:return _context8.abrupt("return",[token,initialAccountPublicKey]);case 18:case"end":return _context8.stop()}}},_callee8,this)}));function createNewToken(_x20,_x21,_x22,_x23,_x24,_x25){return _ref8.apply(this,arguments)}return createNewToken}()}]);return Token}();var sendAndConfirmRawTransaction=function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,rawTransaction){var start,signature,status,statusRetries,duration;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:start=Date.now();_context.next=3;return connection.sendRawTransaction(rawTransaction);case 3:signature=_context.sent;status="";statusRetries=4;case 6:_context.next=8;return connection.getSignatureStatus(signature);case 8:status=_context.sent;if(!(status!=="SignatureNotFound")){_context.next=11;break}return _context.abrupt("break",18);case 11:_context.next=13;return sleep(500);case 13:if(!(--statusRetries<=0)){_context.next=16;break}duration=(Date.now()-start)/1e3;throw new Error("Raw Transaction '"+signature+"' was not confirmed in "+duration.toFixed(2)+" seconds ("+status+")");case 16:_context.next=6;break;case 18:if(!(status==="Confirmed")){_context.next=20;break}return _context.abrupt("return",signature);case 20:throw new Error("Raw transaction "+signature+" failed ("+status+")");case 21:case"end":return _context.stop()}}},_callee,this)}));return function sendAndConfirmRawTransaction(_x,_x2){return _ref.apply(this,arguments)}}();exports.Account=Account;exports.BpfLoader=BpfLoader;exports.BudgetProgram=BudgetProgram;exports.Connection=Connection;exports.Loader=Loader;exports.NativeLoader=NativeLoader;exports.PublicKey=PublicKey;exports.SystemProgram=SystemProgram;exports.Token=Token;exports.TokenAmount=TokenAmount;exports.Transaction=Transaction;exports.TransactionInstruction=TransactionInstruction;exports.sendAndConfirmTransaction=sendAndConfirmTransaction;exports.sendAndConfirmRawTransaction=sendAndConfirmRawTransaction;
//# sourceMappingURL=index.cjs.js.map

@@ -1,1 +0,2 @@

import nacl from"tweetnacl";import bs58 from"bs58";import _Object$keys from"babel-runtime/core-js/object/keys";import{parse,format}from"url";import fetch from"node-fetch";import jayson from"jayson/lib/client/browser";import{struct as struct$1}from"superstruct";import{Client}from"rpc-websockets";import _Promise from"babel-runtime/core-js/promise";import _getIterator from"babel-runtime/core-js/get-iterator";import _JSON$stringify from"babel-runtime/core-js/json/stringify";import _Object$assign from"babel-runtime/core-js/object/assign";import _toConsumableArray from"babel-runtime/helpers/toConsumableArray";import _Object$getPrototypeOf from"babel-runtime/core-js/object/get-prototype-of";import _classCallCheck from"babel-runtime/helpers/classCallCheck";import _createClass from"babel-runtime/helpers/createClass";import _possibleConstructorReturn from"babel-runtime/helpers/possibleConstructorReturn";import _get from"babel-runtime/helpers/get";import _inherits from"babel-runtime/helpers/inherits";import assert from"assert";import BN from"bn.js";import{struct,u32,seq,u8,offset,ns64,blob}from"buffer-layout";import _regeneratorRuntime from"babel-runtime/regenerator";import _asyncToGenerator from"babel-runtime/helpers/asyncToGenerator";var PublicKey=function(){function e(t){if(_classCallCheck(this,e),this._bn="string"==typeof t?t.startsWith("0x")?new BN(t.substring(2),16):new BN(bs58.decode(t)):new BN(t),this._bn.byteLength()>32)throw Error("Invalid public key input")}return _createClass(e,[{key:"equals",value:function(e){return this._bn.eq(e._bn)}},{key:"toBase58",value:function(){return bs58.encode(this.toBuffer())}},{key:"toBuffer",value:function(){var e=this._bn.toArrayLike(Buffer);if(32===e.length)return e;var t=Buffer.alloc(32);return e.copy(t,32-e.length),t}},{key:"toString",value:function(){return this.toBase58()}}],[{key:"isPublicKey",value:function(t){return t instanceof e}}]),e}(),Account=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;_classCallCheck(this,e),this._keypair=t?nacl.sign.keyPair.fromSecretKey(t):nacl.sign.keyPair()}return _createClass(e,[{key:"publicKey",get:function(){return new PublicKey(this._keypair.publicKey)}},{key:"secretKey",get:function(){return this._keypair.secretKey}}]),e}(),publicKey=function(){return blob(32,arguments.length>0&&void 0!==arguments[0]?arguments[0]:"publicKey")},uint64=function(){return blob(8,arguments.length>0&&void 0!==arguments[0]?arguments[0]:"uint64")},rustString=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"string",t=struct([u32("length"),u32("lengthPadding"),blob(offset(u32(),-8),"chars")],e),r=t.decode.bind(t),n=t.encode.bind(t);return t.decode=function(e,t){return r(e,t).chars.toString("utf8")},t.encode=function(e,t,r){var a={chars:Buffer.from(e,"utf8")};return n(a,t,r)},t},PACKET_DATA_SIZE=512,TransactionInstruction=function e(t){_classCallCheck(this,e),this.keys=[],this.userdata=Buffer.alloc(0),t&&_Object$assign(this,t)},Transaction=function(){function e(t){_classCallCheck(this,e),this.signatures=[],this.instructions=[],this.fee=1,t&&_Object$assign(this,t)}return _createClass(e,[{key:"signature",get:function(){return this.signatures.length>0?this.signatures[0].signature:null}}]),_createClass(e,[{key:"add",value:function(){for(var t=this,r=arguments.length,n=Array(r),a=0;r>a;a++)n[a]=arguments[a];if(0===n.length)throw Error("No instructions");return n.forEach(function(r){r instanceof e?t.instructions=t.instructions.concat(r.instructions):t.instructions.push(new TransactionInstruction(r))}),this}},{key:"_getSignData",value:function(){var e=this.lastId;if(!e)throw Error("Transaction lastId required");if(1>this.instructions.length)throw Error("No instructions provided");var t=this.signatures.map(function(e){return""+e.publicKey}),r=[];this.instructions.forEach(function(e){var n=""+e.programId;r.includes(n)||r.push(n),e.keys.map(function(e){return""+e}).forEach(function(e){t.includes(e)||t.push(e)})});var n=this.instructions.map(function(e){var n=e.userdata;return{programIdIndex:r.indexOf(""+e.programId),keyIndices:e.keys.map(function(e){return t.indexOf(""+e)}),userdata:n}});n.forEach(function(e){assert(e.programIdIndex>=0),e.keyIndices.forEach(function(e){return assert(e>=0)})});var a=struct([u8("programIdIndex"),u32("keyIndicesLength"),u32("keyIndicesLengthPadding"),seq(u8("keyIndex"),offset(u32(),-8),"keyIndices"),u32("userdataLength"),u32("userdataLengthPadding"),seq(u8("userdatum"),offset(u32(),-8),"userdata")]),o=struct([u32("keysLength"),u32("keysLengthPadding"),seq(publicKey("key"),offset(u32(),-8),"keys"),publicKey("lastId"),ns64("fee"),u32("programIdsLength"),u32("programIdsLengthPadding"),seq(publicKey("programId"),offset(u32(),-8),"programIds"),u32("instructionsLength"),u32("instructionsLengthPadding"),seq(a,offset(u32(),-8),"instructions")]),s={keys:t.map(function(e){return new PublicKey(e).toBuffer()}),lastId:Buffer.from(bs58.decode(e)),fee:this.fee,programIds:r.map(function(e){return new PublicKey(e).toBuffer()}),instructions:n},u=Buffer.alloc(2048),i=o.encode(s,u);return u=u.slice(0,i)}},{key:"sign",value:function(){this.signPartial.apply(this,arguments)}},{key:"signPartial",value:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];if(0===t.length)throw Error("No signers");var n=t.map(function(e){return{signature:null,publicKey:e instanceof Account?e.publicKey:e}});this.signatures=n;var a=this._getSignData();t.forEach(function(e,t){if(!(e instanceof PublicKey)){var r=nacl.sign.detached(a,e.secretKey);assert(64===r.length),n[t].signature=r}})}},{key:"addSigner",value:function(e){var t=this.signatures.findIndex(function(t){return e.publicKey.equals(t.publicKey)});if(0>t)throw Error("Unknown signer: "+e.publicKey);var r=this._getSignData(),n=nacl.sign.detached(r,e.secretKey);assert(64===n.length),this.signatures[t].signature=n}},{key:"serialize",value:function(){var e=this.signatures;if(!e)throw Error("Transaction has not been signed");var t=this._getSignData(),r=Buffer.alloc(8+64*e.length+t.length);return assert(256>e.length),r.writeUInt8(e.length,0),e.forEach(function(e,t){var n=e.signature;assert(null!==n,"null signature"),assert(64===n.length,"signature has invalid length"),Buffer.from(n).copy(r,8+64*t)}),t.copy(r,8+64*e.length),assert(PACKET_DATA_SIZE>=r.length,"Transaction too large: "+r.length+" > "+PACKET_DATA_SIZE),r}},{key:"keys",get:function(){return assert(1===this.instructions.length),this.instructions[0].keys}},{key:"programId",get:function(){return assert(1===this.instructions.length),this.instructions[0].programId}},{key:"userdata",get:function(){return assert(1===this.instructions.length),this.instructions[0].userdata}}]),e}(),SystemProgram=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"createAccount",value:function(t,r,n,a,o){var s=struct([u32("instruction"),ns64("tokens"),ns64("space"),publicKey("programId")]),u=Buffer.alloc(s.span);return s.encode({instruction:0,tokens:n,space:a,programId:o.toBuffer()},u),(new Transaction).add({keys:[t,r],programId:e.programId,userdata:u})}},{key:"move",value:function(t,r,n){var a=struct([u32("instruction"),ns64("amount")]),o=Buffer.alloc(a.span);return a.encode({instruction:2,amount:n},o),(new Transaction).add({keys:[t,r],programId:e.programId,userdata:o})}},{key:"assign",value:function(t,r){var n=struct([u32("instruction"),publicKey("programId")]),a=Buffer.alloc(n.span);return n.encode({instruction:1,programId:r.toBuffer()},a),(new Transaction).add({keys:[t],programId:e.programId,userdata:a})}},{key:"spawn",value:function(t){var r=struct([u32("instruction")]),n=Buffer.alloc(r.span);return r.encode({instruction:3},n),(new Transaction).add({keys:[t],programId:e.programId,userdata:n})}},{key:"programId",get:function(){return new PublicKey("0x000000000000000000000000000000000000000000000000000000000000000")}}]),e}();function sleep(e){return new _Promise(function(t){return setTimeout(t,e)})}function createRpcRequest(e){var t,r=this,n=jayson((t=_asyncToGenerator(_regeneratorRuntime.mark(function t(n,a){var o,s;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o={method:"POST",body:n,headers:{"Content-Type":"application/json"}},t.prev=1,t.next=4,fetch(e,o);case 4:return s=t.sent,t.next=7,s.text();case 7:a(null,t.sent),t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),a(t.t0);case 14:case"end":return t.stop()}},t,r,[[1,11]])})),function(e,r){return t.apply(this,arguments)}));return function(e,t){return new _Promise(function(r,a){n.request(e,t,function(e,t){e?a(e):r(t)})})}}var GetBalanceRpcResult=struct$1({jsonrpc:struct$1.literal("2.0"),id:"string",error:"any?",result:"number?"});function jsonRpcResult(e){var t=struct$1.literal("2.0");return struct$1.union([struct$1({jsonrpc:t,id:"string",error:"any"}),struct$1({jsonrpc:t,id:"string",error:"null?",result:e})])}var AccountInfoResult=struct$1({executable:"boolean",loader:"array",owner:"array",tokens:"number",userdata:"array"}),GetAccountInfoRpcResult=jsonRpcResult(AccountInfoResult),AccountNotificationResult=struct$1({subscription:"number",result:AccountInfoResult}),ConfirmTransactionRpcResult=jsonRpcResult("boolean"),GetSignatureStatusRpcResult=jsonRpcResult(struct$1.enum(["AccountInUse","Confirmed","GenericFailure","ProgramRuntimeError","SignatureNotFound"])),GetTransactionCountRpcResult=jsonRpcResult("number"),GetLastId=jsonRpcResult("string"),GetFinalityRpcResult=jsonRpcResult("number"),RequestAirdropRpcResult=jsonRpcResult("string"),SendTransactionRpcResult=jsonRpcResult("string"),Connection=function(){function e(t){_classCallCheck(this,e),this._rpcWebSocketConnected=!1,this._disableLastIdCaching=!1,this._accountChangeSubscriptions={},this._accountChangeSubscriptionCounter=0;var r=parse(t);this._rpcRequest=createRpcRequest(r.href),this._lastIdInfo={lastId:null,seconds:-1,transactionSignatures:[]},r.protocol="https:"===r.protocol?"wss:":"ws:",r.host="",r.port=+r.port+1+"","1"===r.port&&(r.port="wss:"===r.protocol?"8901":"8900"),this._rpcWebSocket=new Client(format(r),{autoconnect:!1,max_reconnects:1/0}),this._rpcWebSocket.on("open",this._wsOnOpen.bind(this)),this._rpcWebSocket.on("error",this._wsOnError.bind(this)),this._rpcWebSocket.on("close",this._wsOnClose.bind(this)),this._rpcWebSocket.on("accountNotification",this._wsOnAccountNotification.bind(this))}return _createClass(e,[{key:"getBalance",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getBalance",[t.toBase58()]);case 2:if(!(r=GetBalanceRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),e.abrupt("return",r.result);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getAccountInfo",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getAccountInfo",[t.toBase58()]);case 2:if(!(r=GetAccountInfoRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==(n=r.result)),e.abrupt("return",{executable:n.executable,loader:new PublicKey(n.loader),owner:new PublicKey(n.owner),tokens:n.tokens,userdata:Buffer.from(n.userdata)});case 9:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"confirmTransaction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("confirmTransaction",[t]);case 2:if(!(r=ConfirmTransactionRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),e.abrupt("return",r.result);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getSignatureStatus",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getSignatureStatus",[t]);case 2:if(!(r=GetSignatureStatusRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),e.abrupt("return",r.result);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getTransactionCount",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getTransactionCount",[]);case 2:if(!(t=GetTransactionCountRpcResult(e.sent)).error){e.next=6;break}throw Error(t.error.message);case 6:return assert(void 0!==t.result),e.abrupt("return",+t.result);case 8:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"getLastId",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getLastId",[]);case 2:if(!(t=GetLastId(e.sent)).error){e.next=6;break}throw Error(t.error.message);case 6:return assert(void 0!==t.result),e.abrupt("return",t.result);case 8:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"getFinality",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("getFinality",[]);case 2:if(!(t=GetFinalityRpcResult(e.sent)).error){e.next=6;break}throw Error(t.error.message);case 6:return assert(void 0!==t.result),e.abrupt("return",+t.result);case 8:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"requestAirdrop",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r){var n;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("requestAirdrop",[t.toBase58(),r]);case 2:if(!(n=RequestAirdropRpcResult(e.sent)).error){e.next=6;break}throw Error(n.error.message);case 6:return assert(void 0!==n.result),e.abrupt("return",n.result);case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"sendTransaction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){for(var r=arguments.length,n=Array(r>1?r-1:0),a=1;r>a;a++)n[a-1]=arguments[a];var o,s,u,i,c,l;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(o=(new Date).getSeconds(),null==this._lastIdInfo.lastId||this._lastIdInfo.seconds!==o){e.next=11;break}if(t.lastId=this._lastIdInfo.lastId,t.sign.apply(t,n),t.signature){e.next=6;break}throw Error("!signature");case 6:if(this._lastIdInfo.transactionSignatures.includes(s=""+t.signature)){e.next=11;break}return this._lastIdInfo.transactionSignatures.push(s),this._disableLastIdCaching&&(this._lastIdInfo.seconds=-1),e.abrupt("break",28);case 11:u=0,i=Date.now();case 13:return e.next=15,this.getLastId();case 15:if(this._lastIdInfo.lastId==(c=e.sent)){e.next=19;break}return this._lastIdInfo={lastId:c,seconds:(new Date).getSeconds(),transactionSignatures:[]},e.abrupt("break",26);case 19:if(8!==u){e.next=21;break}throw Error("Unable to obtain a new last id after "+(Date.now()-i)+"ms");case 21:return e.next=23,sleep(250);case 23:++u;case 24:e.next=13;break;case 26:e.next=0;break;case 28:return l=t.serialize(),e.next=31,this.sendRawTransaction(l);case 31:return e.abrupt("return",e.sent);case 32:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"sendRawTransaction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._rpcRequest("sendTransaction",[[].concat(_toConsumableArray(t))]);case 2:if(!(r=SendTransactionRpcResult(e.sent)).error){e.next=6;break}throw Error(r.error.message);case 6:return assert(void 0!==r.result),assert(r.result),e.abrupt("return",r.result);case 9:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"_wsOnOpen",value:function(){this._rpcWebSocketConnected=!0,this._updateSubscriptions()}},{key:"_wsOnError",value:function(e){console.log("ws error:",e.message)}},{key:"_wsOnClose",value:function(e,t){1e3!==e&&console.log("ws close:",e,t),this._rpcWebSocketConnected=!1}},{key:"_wsOnAccountNotification",value:function(e){var t=AccountNotificationResult(e);if(t.error)throw Error(t.error.message);var r=_Object$keys(this._accountChangeSubscriptions).map(Number),n=!0,a=!1,o=void 0;try{for(var s,u=_getIterator(r);!(n=(s=u.next()).done);n=!0){var i=this._accountChangeSubscriptions[s.value];if(i.subscriptionId===t.subscription){var c=t.result;return assert(void 0!==c),i.callback({executable:c.executable,loader:new PublicKey(c.loader),owner:new PublicKey(c.owner),tokens:c.tokens,userdata:Buffer.from(c.userdata)}),!0}}}catch(e){a=!0,o=e}finally{try{!n&&u.return&&u.return()}finally{if(a)throw o}}}},{key:"_updateSubscriptions",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t,r,n,a,o,s,u,i,c,l,f,p,h,d;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==(t=_Object$keys(this._accountChangeSubscriptions).map(Number)).length){e.next=4;break}return this._rpcWebSocket.close(),e.abrupt("return");case 4:if(this._rpcWebSocketConnected){e.next=26;break}for(r=!0,n=!1,a=void 0,e.prev=8,o=_getIterator(t);!(r=(s=o.next()).done);r=!0)this._accountChangeSubscriptions[s.value].subscriptionId=null;e.next=16;break;case 12:e.prev=12,e.t0=e.catch(8),n=!0,a=e.t0;case 16:e.prev=16,e.prev=17,!r&&o.return&&o.return();case 19:if(e.prev=19,!n){e.next=22;break}throw a;case 22:return e.finish(19);case 23:return e.finish(16);case 24:return this._rpcWebSocket.connect(),e.abrupt("return");case 26:u=!0,i=!1,c=void 0,e.prev=29,l=_getIterator(t);case 31:if(u=(f=l.next()).done){e.next=47;break}if(d=(h=this._accountChangeSubscriptions[p=f.value]).publicKey,null!==h.subscriptionId){e.next=44;break}return e.prev=35,e.next=38,this._rpcWebSocket.call("accountSubscribe",[d]);case 38:this._accountChangeSubscriptions[p].subscriptionId=e.sent,e.next=44;break;case 41:e.prev=41,e.t1=e.catch(35),console.log("accountSubscribe error for "+d+": "+e.t1.message);case 44:u=!0,e.next=31;break;case 47:e.next=53;break;case 49:e.prev=49,e.t2=e.catch(29),i=!0,c=e.t2;case 53:e.prev=53,e.prev=54,!u&&l.return&&l.return();case 56:if(e.prev=56,!i){e.next=59;break}throw c;case 59:return e.finish(56);case 60:return e.finish(53);case 61:case"end":return e.stop()}},e,this,[[8,12,16,24],[17,,19,23],[29,49,53,61],[35,41],[54,,56,60]])}));return function(){return e.apply(this,arguments)}}()},{key:"onAccountChange",value:function(e,t){var r=++this._accountChangeSubscriptionCounter;return this._accountChangeSubscriptions[r]={publicKey:e.toBase58(),callback:t,subscriptionId:null},this._updateSubscriptions(),r}},{key:"removeAccountChangeListener",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._accountChangeSubscriptions[t]){e.next=15;break}if(r=this._accountChangeSubscriptions[t].subscriptionId,delete this._accountChangeSubscriptions[t],null===r){e.next=12;break}return e.prev=4,e.next=7,this._rpcWebSocket.call("accountUnsubscribe",[r]);case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(4),console.log("accountUnsubscribe error:",e.t0.message);case 12:this._updateSubscriptions(),e.next=16;break;case 15:throw Error("Unknown account change id: "+t);case 16:case"end":return e.stop()}},e,this,[[4,9]])}));return function(t){return e.apply(this,arguments)}}()}]),e}(),sendAndConfirmTransaction=function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r){for(var n=arguments.length,a=Array(n>2?n-2:0),o=2;n>o;o++)a[o-2]=arguments[o];var s,u,i,c,l,f;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:s=10,u=void 0;case 2:return i=Date.now(),e.next=5,t.sendTransaction.apply(t,[r].concat(a));case 5:u=e.sent,c="SignatureNotFound",l=4;case 8:return e.next=10,t.getSignatureStatus(u);case 10:if("SignatureNotFound"===(c=e.sent)){e.next=13;break}return e.abrupt("break",20);case 13:return e.next=15,sleep(500);case 15:if(0<--l){e.next=18;break}throw f=(Date.now()-i)/1e3,Error("Transaction '"+u+"' was not confirmed in "+f.toFixed(2)+" seconds ("+c+")");case 18:e.next=8;break;case 20:if("Confirmed"!==c){e.next=22;break}return e.abrupt("break",28);case 22:if("AccountInUse"===c&&--s>0){e.next=24;break}throw Error("Transaction "+u+" failed ("+c+")");case 24:return e.next=26,sleep(100*Math.random());case 26:e.next=2;break;case 28:return assert(void 0!==u),e.abrupt("return",u);case 30:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}(),Loader=function(){function e(t,r){_classCallCheck(this,e),_Object$assign(this,{connection:t,programId:r})}return _createClass(e,null,[{key:"chunkSize",get:function(){return 256}}]),_createClass(e,[{key:"load",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n){var a,o,s,u,i,c,l,f;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:a=struct([u32("instruction"),u32("offset"),u32("bytesLength"),u32("bytesLengthPadding"),seq(u8("byte"),offset(u32(),-8),"bytes")]),o=e.chunkSize,s=0,u=n,i=[];case 5:if(u.length<=0){t.next=19;break}if(c=u.slice(0,o),l=Buffer.alloc(o+16),a.encode({instruction:0,offset:s,bytes:c},l),f=(new Transaction).add({keys:[r.publicKey],programId:this.programId,userdata:l}),i.push(sendAndConfirmTransaction(this.connection,f,r)),8!==i.length){t.next=15;break}return t.next=14,_Promise.all(i);case 14:i=[];case 15:s+=o,u=u.slice(o),t.next=5;break;case 19:return t.next=21,_Promise.all(i);case 21:case"end":return t.stop()}},t,this)}));return function(e,r){return t.apply(this,arguments)}}()},{key:"finalize",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n,a;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=struct([u32("instruction")]),n=Buffer.alloc(r.span),r.encode({instruction:1},n),(a=new Transaction).add({keys:[t.publicKey],programId:this.programId,userdata:n}),a.add(SystemProgram.spawn(t.publicKey)),e.next=8,sendAndConfirmTransaction(this.connection,a,t);case 8:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()}]),e}(),BpfLoader=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"load",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n,a){var o,s,u;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=new Account,s=SystemProgram.createAccount(n.publicKey,o.publicKey,1+Math.ceil(a.length/Loader.chunkSize)+1,a.length,e.programId),t.next=4,sendAndConfirmTransaction(r,s,n);case 4:return u=new Loader(r,e.programId),t.next=7,u.load(o,a);case 7:return t.next=9,u.finalize(o);case 9:return t.abrupt("return",o.publicKey);case 10:case"end":return t.stop()}},t,this)}));return function(e,r,n){return t.apply(this,arguments)}}()},{key:"programId",get:function(){return new PublicKey("0x8000000000000000000000000000000000000000000000000000000000000000")}}]),e}();function serializePayment(e){var t=e.to.toBuffer(),r=Buffer.alloc(8+t.length);return r.writeUInt32LE(e.amount,0),t.copy(r,8),r}function serializeDate(e){var t=Buffer.alloc(28);return t.writeUInt32LE(20,0),t.write(function(e){function t(e){return 10>e?"0"+e:e}return e.getUTCFullYear()+"-"+t(e.getUTCMonth()+1)+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"Z"}(e),8),t}function serializeCondition(e){switch(e.type){case"timestamp":var t=serializeDate(e.when),r=e.from.toBuffer(),n=Buffer.alloc(4+t.length+r.length);return n.writeUInt32LE(0,0),t.copy(n,4),r.copy(n,4+t.length),n;case"signature":var a=struct([u32("condition"),publicKey("from")]),o=e.from.toBuffer(),s=Buffer.alloc(4+o.length);return a.encode({instruction:1,from:o},s),s;default:throw Error("Unknown condition type: "+e.type)}}var BudgetProgram=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"timestampCondition",value:function(e,t){return{type:"timestamp",from:e,when:t}}},{key:"signatureCondition",value:function(e){return{type:"signature",from:e}}},{key:"pay",value:function(e,t,r,n){var a=Buffer.alloc(1024),o=0;a.writeUInt32LE(0,o),o+=4;for(var s=arguments.length,u=Array(s>4?s-4:0),i=4;s>i;i++)u[i-4]=arguments[i];switch(u.length){case 0:a.writeUInt32LE(0,o),o+=4;var c=serializePayment({amount:n,to:r});return c.copy(a,o),o+=c.length,(new Transaction).add({keys:[e,r],programId:this.programId,userdata:a.slice(0,o)});case 1:a.writeUInt32LE(1,o),o+=4;var l=serializeCondition(u[0]);l.copy(a,o),o+=l.length;var f=serializePayment({amount:n,to:r});return f.copy(a,o),o+=f.length,(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:a.slice(0,o)});case 2:a.writeUInt32LE(2,o),o+=4;var p=!0,h=!1,d=void 0;try{for(var g,m=_getIterator(u);!(p=(g=m.next()).done);p=!0){var y=serializeCondition(g.value);y.copy(a,o),o+=y.length;var b=serializePayment({amount:n,to:r});b.copy(a,o),o+=b.length}}catch(e){h=!0,d=e}finally{try{!p&&m.return&&m.return()}finally{if(h)throw d}}return(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:a.slice(0,o)});default:throw Error("A maximum of two conditions are support: "+u.length+" provided")}}},{key:"payOnBoth",value:function(e,t,r,n,a,o){var s=Buffer.alloc(1024),u=0;s.writeUInt32LE(0,u),s.writeUInt32LE(3,u+=4),u+=4;for(var i=[a,o],c=0;i.length>c;c++){var l=serializeCondition(i[c]);l.copy(s,u),u+=l.length}var f=serializePayment({amount:n,to:r});return f.copy(s,u),u+=f.length,(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:s.slice(0,u)})}},{key:"applyTimestamp",value:function(e,t,r,n){var a=serializeDate(n),o=Buffer.alloc(4+a.length);return o.writeUInt32LE(1,0),a.copy(o,4),(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:o})}},{key:"applySignature",value:function(e,t,r){var n=struct([u32("instruction")]),a=Buffer.alloc(n.span);return n.encode({instruction:2},a),(new Transaction).add({keys:[e,t,r],programId:this.programId,userdata:a})}},{key:"programId",get:function(){return new PublicKey("0x8100000000000000000000000000000000000000000000000000000000000000")}},{key:"space",get:function(){return 128}}]),e}(),NativeLoader=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"load",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n,a){var o,s,u,i;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=[].concat(_toConsumableArray(Buffer.from(a))),s=new Account,u=SystemProgram.createAccount(n.publicKey,s.publicKey,3,o.length+1,e.programId),t.next=5,sendAndConfirmTransaction(r,u,n);case 5:return i=new Loader(r,e.programId),t.next=8,i.load(s,o);case 8:return t.next=10,i.finalize(s);case 10:return t.abrupt("return",s.publicKey);case 11:case"end":return t.stop()}},t,this)}));return function(e,r,n){return t.apply(this,arguments)}}()},{key:"programId",get:function(){return new PublicKey("0x100000000000000000000000000000000000000000000000000000000000000")}}]),e}(),TokenAmount=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||_Object$getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,BN),_createClass(t,[{key:"toBuffer",value:function(){var e=_get(t.prototype.__proto__||_Object$getPrototypeOf(t.prototype),"toArray",this).call(this).reverse(),r=Buffer.from(e);if(8===r.length)return r;assert(8>r.length,"TokenAmount too large");var n=Buffer.alloc(8);return r.copy(n),n}}],[{key:"fromBuffer",value:function(e){return assert(8===e.length,"Invalid buffer length: "+e.length),new BN([].concat(_toConsumableArray(e)).reverse().map(function(e){return("00"+e.toString(16)).slice(-2)}).join(""),16)}}]),t}(),TokenInfoLayout=struct([uint64("supply"),u8("decimals"),rustString("name"),rustString("symbol")]),TokenAccountInfoLayout=struct([publicKey("token"),publicKey("owner"),uint64("amount"),u8("sourceOption"),publicKey("source"),uint64("originalAmount")]),SYSTEM_TOKEN_PROGRAM_ID=new PublicKey("0x8300000000000000000000000000000000000000000000000000000000000000"),Token=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:SYSTEM_TOKEN_PROGRAM_ID;_classCallCheck(this,e),_Object$assign(this,{connection:t,token:r,programId:n})}return _createClass(e,[{key:"newAccount",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n,a,o,s,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=new Account,n=void 0,a=struct([u32("instruction")]),o=Buffer.alloc(a.span),a.encode({instruction:1},o),n=SystemProgram.createAccount(t.publicKey,r.publicKey,1,1+TokenAccountInfoLayout.span,this.programId),e.next=8,sendAndConfirmTransaction(this.connection,n,t);case 8:return s=[r.publicKey,t.publicKey,this.token],u&&s.push(u),(n=(new Transaction).add({keys:s,programId:this.programId,userdata:o})).fee=0,e.next=14,sendAndConfirmTransaction(this.connection,n,r);case 14:return e.abrupt("return",r.publicKey);case 15:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"tokenInfo",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(){var t,r,n;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.connection.getAccountInfo(this.token);case 2:if((t=e.sent).owner.equals(this.programId)){e.next=5;break}throw Error("Invalid token owner: "+_JSON$stringify(t.owner));case 5:if(1===(r=Buffer.from(t.userdata)).readUInt8(0)){e.next=8;break}throw Error("Invalid token userdata");case 8:return(n=TokenInfoLayout.decode(r,1)).supply=TokenAmount.fromBuffer(n.supply),e.abrupt("return",n);case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"accountInfo",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t){var r,n,a;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.connection.getAccountInfo(t);case 2:if((r=e.sent).owner.equals(this.programId)){e.next=5;break}throw Error("Invalid token account owner");case 5:if(2===(n=Buffer.from(r.userdata)).readUInt8(0)){e.next=8;break}throw Error("Invalid token account userdata");case 8:if((a=TokenAccountInfoLayout.decode(n,1)).token=new PublicKey(a.token),a.owner=new PublicKey(a.owner),a.amount=TokenAmount.fromBuffer(a.amount),0===a.sourceOption?(a.source=null,a.originalAmount=new TokenAmount):(a.source=new PublicKey(a.source),a.originalAmount=TokenAmount.fromBuffer(a.originalAmount)),a.token.equals(this.token)){e.next=15;break}throw Error("Invalid token account token: "+_JSON$stringify(a.token)+" !== "+_JSON$stringify(this.token));case 15:return e.abrupt("return",a);case 16:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"transfer",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n,a){return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=sendAndConfirmTransaction,e.t1=this.connection,e.t2=new Transaction,e.next=5,this.transferInstruction(t.publicKey,r,n,a);case 5:return e.t3=e.sent,e.t4=e.t2.add.call(e.t2,e.t3),e.t5=t,e.next=10,(0,e.t0)(e.t1,e.t4,e.t5);case 10:return e.abrupt("return",e.sent);case 11:case"end":return e.stop()}},e,this)}));return function(t,r,n,a){return e.apply(this,arguments)}}()},{key:"approve",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n,a){return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,sendAndConfirmTransaction(this.connection,(new Transaction).add(this.approveInstruction(t.publicKey,r,n,a)),t);case 2:case"end":return e.stop()}},e,this)}));return function(t,r,n,a){return e.apply(this,arguments)}}()},{key:"revoke",value:function(e,t,r){return this.approve(e,t,r,0)}},{key:"setOwner",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n){return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,sendAndConfirmTransaction(this.connection,(new Transaction).add(this.setOwnerInstruction(t.publicKey,r,n)),t);case 2:case"end":return e.stop()}},e,this)}));return function(t,r,n){return e.apply(this,arguments)}}()},{key:"transferInstruction",value:function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r,n,a){var o,s,u,i;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.accountInfo(r);case 2:if(t.equals((o=e.sent).owner)){e.next=5;break}throw Error("Account owner mismatch");case 5:return s=struct([u32("instruction"),uint64("amount")]),u=Buffer.alloc(s.span),s.encode({instruction:2,amount:new TokenAmount(a).toBuffer()},u),i=[t,r,n],o.source&&i.push(o.source),e.abrupt("return",new TransactionInstruction({keys:i,programId:this.programId,userdata:u}));case 11:case"end":return e.stop()}},e,this)}));return function(t,r,n,a){return e.apply(this,arguments)}}()},{key:"approveInstruction",value:function(e,t,r,n){var a=struct([u32("instruction"),uint64("amount")]),o=Buffer.alloc(a.span);return a.encode({instruction:3,amount:new TokenAmount(n).toBuffer()},o),new TransactionInstruction({keys:[e,t,r],programId:this.programId,userdata:o})}},{key:"revokeInstruction",value:function(e,t,r){return this.approveInstruction(e,t,r,0)}},{key:"setOwnerInstruction",value:function(e,t,r){var n=struct([u32("instruction")]),a=Buffer.alloc(n.span);return n.encode({instruction:4},a),new TransactionInstruction({keys:[e,t,r],programId:this.programId,userdata:a})}}],[{key:"createNewToken",value:function(){var t=_asyncToGenerator(_regeneratorRuntime.mark(function t(r,n,a,o,s,u){var i,c,l,f,p,h,d,g=arguments.length>6&&void 0!==arguments[6]?arguments[6]:SYSTEM_TOKEN_PROGRAM_ID;return _regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return i=new Account,c=new e(r,i.publicKey,g),t.next=4,c.newAccount(n,null);case 4:return l=t.sent,f=void 0,p=struct([u32("instruction"),uint64("supply"),u8("decimals"),rustString("name"),rustString("symbol")]),h=Buffer.alloc(1024),d=p.encode({instruction:0,supply:a.toBuffer(),decimals:u,name:o,symbol:s},h),h=h.slice(0,d),f=SystemProgram.createAccount(n.publicKey,i.publicKey,1,1+h.length,g),t.next=13,sendAndConfirmTransaction(r,f,n);case 13:return(f=(new Transaction).add({keys:[i.publicKey,l],programId:g,userdata:h})).fee=0,t.next=17,sendAndConfirmTransaction(r,f,i);case 17:return t.abrupt("return",[c,l]);case 18:case"end":return t.stop()}},t,this)}));return function(e,r,n,a,o,s){return t.apply(this,arguments)}}()}]),e}(),sendAndConfirmRawTransaction=function(){var e=_asyncToGenerator(_regeneratorRuntime.mark(function e(t,r){var n,a,o,s,u;return _regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=Date.now(),e.next=3,t.sendRawTransaction(r);case 3:a=e.sent,o="",s=4;case 6:return e.next=8,t.getSignatureStatus(a);case 8:if("SignatureNotFound"===(o=e.sent)){e.next=11;break}return e.abrupt("break",18);case 11:return e.next=13,sleep(500);case 13:if(0<--s){e.next=16;break}throw u=(Date.now()-n)/1e3,Error("Raw Transaction '"+a+"' was not confirmed in "+u.toFixed(2)+" seconds ("+o+")");case 16:e.next=6;break;case 18:if("Confirmed"!==o){e.next=20;break}return e.abrupt("return",a);case 20:throw Error("Raw transaction "+a+" failed ("+o+")");case 21:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}();export{Account,BpfLoader,BudgetProgram,Connection,Loader,NativeLoader,PublicKey,SystemProgram,Token,TokenAmount,Transaction,TransactionInstruction,sendAndConfirmTransaction,sendAndConfirmRawTransaction};
import nacl from"tweetnacl";import bs58 from"bs58";import _Object$keys from"babel-runtime/core-js/object/keys";import{parse,format}from"url";import fetch from"node-fetch";import jayson from"jayson/lib/client/browser";import{struct as struct$1}from"superstruct";import{Client}from"rpc-websockets";import _Promise from"babel-runtime/core-js/promise";import _getIterator from"babel-runtime/core-js/get-iterator";import _JSON$stringify from"babel-runtime/core-js/json/stringify";import _Object$assign from"babel-runtime/core-js/object/assign";import _toConsumableArray from"babel-runtime/helpers/toConsumableArray";import _Object$getPrototypeOf from"babel-runtime/core-js/object/get-prototype-of";import _classCallCheck from"babel-runtime/helpers/classCallCheck";import _createClass from"babel-runtime/helpers/createClass";import _possibleConstructorReturn from"babel-runtime/helpers/possibleConstructorReturn";import _get from"babel-runtime/helpers/get";import _inherits from"babel-runtime/helpers/inherits";import assert from"assert";import BN from"bn.js";import{struct,u32,seq,u8,offset,ns64,blob}from"buffer-layout";import _regeneratorRuntime from"babel-runtime/regenerator";import _asyncToGenerator from"babel-runtime/helpers/asyncToGenerator";var PublicKey=function(){function PublicKey(value){_classCallCheck(this,PublicKey);if(typeof value==="string"){if(value.startsWith("0x")){this._bn=new BN(value.substring(2),16)}else{this._bn=new BN(bs58.decode(value))}}else{this._bn=new BN(value)}if(this._bn.byteLength()>32){throw new Error("Invalid public key input")}}_createClass(PublicKey,[{key:"equals",value:function equals(publicKey){return this._bn.eq(publicKey._bn)}},{key:"toBase58",value:function toBase58(){return bs58.encode(this.toBuffer())}},{key:"toBuffer",value:function toBuffer(){var b=this._bn.toArrayLike(Buffer);if(b.length===32){return b}var zeroPad=Buffer.alloc(32);b.copy(zeroPad,32-b.length);return zeroPad}},{key:"toString",value:function toString(){return this.toBase58()}}],[{key:"isPublicKey",value:function isPublicKey(o){return o instanceof PublicKey}}]);return PublicKey}();var Account=function(){function Account(){var secretKey=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;_classCallCheck(this,Account);if(secretKey){this._keypair=nacl.sign.keyPair.fromSecretKey(secretKey)}else{this._keypair=nacl.sign.keyPair()}}_createClass(Account,[{key:"publicKey",get:function get(){return new PublicKey(this._keypair.publicKey)}},{key:"secretKey",get:function get(){return this._keypair.secretKey}}]);return Account}();var publicKey=function publicKey(){var property=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"publicKey";return blob(32,property)};var uint64=function uint64(){var property=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"uint64";return blob(8,property)};var rustString=function rustString(){var property=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"string";var rsl=struct([u32("length"),u32("lengthPadding"),blob(offset(u32(),-8),"chars")],property);var _decode=rsl.decode.bind(rsl);var _encode=rsl.encode.bind(rsl);rsl.decode=function(buffer,offset$$1){var data=_decode(buffer,offset$$1);return data.chars.toString("utf8")};rsl.encode=function(str,buffer,offset$$1){var data={chars:Buffer.from(str,"utf8")};return _encode(data,buffer,offset$$1)};return rsl};var PACKET_DATA_SIZE=512;var TransactionInstruction=function TransactionInstruction(opts){_classCallCheck(this,TransactionInstruction);this.keys=[];this.userdata=Buffer.alloc(0);opts&&_Object$assign(this,opts)};var Transaction=function(){_createClass(Transaction,[{key:"signature",get:function get(){if(this.signatures.length>0){return this.signatures[0].signature}return null}}]);function Transaction(opts){_classCallCheck(this,Transaction);this.signatures=[];this.instructions=[];this.fee=1;opts&&_Object$assign(this,opts)}_createClass(Transaction,[{key:"add",value:function add(){var _this=this;for(var _len=arguments.length,items=Array(_len),_key=0;_key<_len;_key++){items[_key]=arguments[_key]}if(items.length===0){throw new Error("No instructions")}items.forEach(function(item){if(item instanceof Transaction){_this.instructions=_this.instructions.concat(item.instructions)}else{_this.instructions.push(new TransactionInstruction(item))}});return this}},{key:"_getSignData",value:function _getSignData(){var lastId=this.lastId;if(!lastId){throw new Error("Transaction lastId required")}if(this.instructions.length<1){throw new Error("No instructions provided")}var keys=this.signatures.map(function(_ref){var publicKey$$1=_ref.publicKey;return publicKey$$1.toString()});var programIds=[];this.instructions.forEach(function(instruction){var programId=instruction.programId.toString();if(!programIds.includes(programId)){programIds.push(programId)}instruction.keys.map(function(key){return key.toString()}).forEach(function(key){if(!keys.includes(key)){keys.push(key)}})});var instructions=this.instructions.map(function(instruction){var userdata=instruction.userdata,programId=instruction.programId;return{programIdIndex:programIds.indexOf(programId.toString()),keyIndices:instruction.keys.map(function(key){return keys.indexOf(key.toString())}),userdata:userdata}});instructions.forEach(function(instruction){assert(instruction.programIdIndex>=0);instruction.keyIndices.forEach(function(keyIndex){return assert(keyIndex>=0)})});var instructionLayout=struct([u8("programIdIndex"),u32("keyIndicesLength"),u32("keyIndicesLengthPadding"),seq(u8("keyIndex"),offset(u32(),-8),"keyIndices"),u32("userdataLength"),u32("userdataLengthPadding"),seq(u8("userdatum"),offset(u32(),-8),"userdata")]);var signDataLayout=struct([u32("keysLength"),u32("keysLengthPadding"),seq(publicKey("key"),offset(u32(),-8),"keys"),publicKey("lastId"),ns64("fee"),u32("programIdsLength"),u32("programIdsLengthPadding"),seq(publicKey("programId"),offset(u32(),-8),"programIds"),u32("instructionsLength"),u32("instructionsLengthPadding"),seq(instructionLayout,offset(u32(),-8),"instructions")]);var transaction={keys:keys.map(function(key){return new PublicKey(key).toBuffer()}),lastId:Buffer.from(bs58.decode(lastId)),fee:this.fee,programIds:programIds.map(function(programId){return new PublicKey(programId).toBuffer()}),instructions:instructions};var signData=Buffer.alloc(2048);var length=signDataLayout.encode(transaction,signData);signData=signData.slice(0,length);return signData}},{key:"sign",value:function sign(){this.signPartial.apply(this,arguments)}},{key:"signPartial",value:function signPartial(){for(var _len2=arguments.length,partialSigners=Array(_len2),_key2=0;_key2<_len2;_key2++){partialSigners[_key2]=arguments[_key2]}if(partialSigners.length===0){throw new Error("No signers")}var signatures=partialSigners.map(function(accountOrPublicKey){var publicKey$$1=accountOrPublicKey instanceof Account?accountOrPublicKey.publicKey:accountOrPublicKey;return{signature:null,publicKey:publicKey$$1}});this.signatures=signatures;var signData=this._getSignData();partialSigners.forEach(function(accountOrPublicKey,index){if(accountOrPublicKey instanceof PublicKey){return}var signature=nacl.sign.detached(signData,accountOrPublicKey.secretKey);assert(signature.length===64);signatures[index].signature=signature})}},{key:"addSigner",value:function addSigner(signer){var index=this.signatures.findIndex(function(sigpair){return signer.publicKey.equals(sigpair.publicKey)});if(index<0){throw new Error("Unknown signer: "+signer.publicKey.toString())}var signData=this._getSignData();var signature=nacl.sign.detached(signData,signer.secretKey);assert(signature.length===64);this.signatures[index].signature=signature}},{key:"serialize",value:function serialize(){var signatures=this.signatures;if(!signatures){throw new Error("Transaction has not been signed")}var signData=this._getSignData();var wireTransaction=Buffer.alloc(8+signatures.length*64+signData.length);assert(signatures.length<256);wireTransaction.writeUInt8(signatures.length,0);signatures.forEach(function(_ref2,index){var signature=_ref2.signature;assert(signature!==null,"null signature");assert(signature.length===64,"signature has invalid length");Buffer.from(signature).copy(wireTransaction,8+index*64)});signData.copy(wireTransaction,8+signatures.length*64);assert(wireTransaction.length<=PACKET_DATA_SIZE,"Transaction too large: "+wireTransaction.length+" > "+PACKET_DATA_SIZE);return wireTransaction}},{key:"keys",get:function get(){assert(this.instructions.length===1);return this.instructions[0].keys}},{key:"programId",get:function get(){assert(this.instructions.length===1);return this.instructions[0].programId}},{key:"userdata",get:function get(){assert(this.instructions.length===1);return this.instructions[0].userdata}}]);return Transaction}();var SystemProgram=function(){function SystemProgram(){_classCallCheck(this,SystemProgram)}_createClass(SystemProgram,null,[{key:"createAccount",value:function createAccount(from,newAccount,tokens,space,programId){var userdataLayout=struct([u32("instruction"),ns64("tokens"),ns64("space"),publicKey("programId")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:0,tokens:tokens,space:space,programId:programId.toBuffer()},userdata);return(new Transaction).add({keys:[from,newAccount],programId:SystemProgram.programId,userdata:userdata})}},{key:"move",value:function move(from,to,amount){var userdataLayout=struct([u32("instruction"),ns64("amount")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:2,amount:amount},userdata);return(new Transaction).add({keys:[from,to],programId:SystemProgram.programId,userdata:userdata})}},{key:"assign",value:function assign(from,programId){var userdataLayout=struct([u32("instruction"),publicKey("programId")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:1,programId:programId.toBuffer()},userdata);return(new Transaction).add({keys:[from],programId:SystemProgram.programId,userdata:userdata})}},{key:"spawn",value:function spawn(programId){var userdataLayout=struct([u32("instruction")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:3},userdata);return(new Transaction).add({keys:[programId],programId:SystemProgram.programId,userdata:userdata})}},{key:"programId",get:function get(){return new PublicKey("0x000000000000000000000000000000000000000000000000000000000000000")}}]);return SystemProgram}();function sleep(ms){return new _Promise(function(resolve){return setTimeout(resolve,ms)})}function createRpcRequest(url){var _this=this;var server=jayson(function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(request,callback){var options,res,text;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:options={method:"POST",body:request,headers:{"Content-Type":"application/json"}};_context.prev=1;_context.next=4;return fetch(url,options);case 4:res=_context.sent;_context.next=7;return res.text();case 7:text=_context.sent;callback(null,text);_context.next=14;break;case 11:_context.prev=11;_context.t0=_context["catch"](1);callback(_context.t0);case 14:case"end":return _context.stop()}}},_callee,_this,[[1,11]])}));return function(_x,_x2){return _ref.apply(this,arguments)}}());return function(method,args){return new _Promise(function(resolve,reject){server.request(method,args,function(err,response){if(err){reject(err);return}resolve(response)})})}}var GetBalanceRpcResult=struct$1({jsonrpc:struct$1.literal("2.0"),id:"string",error:"any?",result:"number?"});function jsonRpcResult(resultDescription){var jsonRpcVersion=struct$1.literal("2.0");return struct$1.union([struct$1({jsonrpc:jsonRpcVersion,id:"string",error:"any"}),struct$1({jsonrpc:jsonRpcVersion,id:"string",error:"null?",result:resultDescription})])}var AccountInfoResult=struct$1({executable:"boolean",loader:"array",owner:"array",tokens:"number",userdata:"array"});var GetAccountInfoRpcResult=jsonRpcResult(AccountInfoResult);var AccountNotificationResult=struct$1({subscription:"number",result:AccountInfoResult});var ConfirmTransactionRpcResult=jsonRpcResult("boolean");var GetSignatureStatusRpcResult=jsonRpcResult(struct$1.enum(["AccountInUse","Confirmed","GenericFailure","ProgramRuntimeError","SignatureNotFound"]));var GetTransactionCountRpcResult=jsonRpcResult("number");var GetLastId=jsonRpcResult("string");var GetFinalityRpcResult=jsonRpcResult("number");var RequestAirdropRpcResult=jsonRpcResult("string");var SendTransactionRpcResult=jsonRpcResult("string");var Connection=function(){function Connection(endpoint){_classCallCheck(this,Connection);this._rpcWebSocketConnected=false;this._disableLastIdCaching=false;this._accountChangeSubscriptions={};this._accountChangeSubscriptionCounter=0;var url=parse(endpoint);this._rpcRequest=createRpcRequest(url.href);this._lastIdInfo={lastId:null,seconds:-1,transactionSignatures:[]};url.protocol=url.protocol==="https:"?"wss:":"ws:";url.host="";url.port=String(Number(url.port)+1);if(url.port==="1"){url.port=url.protocol==="wss:"?"8901":"8900"}this._rpcWebSocket=new Client(format(url),{autoconnect:false,max_reconnects:Infinity});this._rpcWebSocket.on("open",this._wsOnOpen.bind(this));this._rpcWebSocket.on("error",this._wsOnError.bind(this));this._rpcWebSocket.on("close",this._wsOnClose.bind(this));this._rpcWebSocket.on("accountNotification",this._wsOnAccountNotification.bind(this))}_createClass(Connection,[{key:"getBalance",value:function(){var _ref2=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(publicKey){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:_context2.next=2;return this._rpcRequest("getBalance",[publicKey.toBase58()]);case 2:unsafeRes=_context2.sent;res=GetBalanceRpcResult(unsafeRes);if(!res.error){_context2.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context2.abrupt("return",res.result);case 8:case"end":return _context2.stop()}}},_callee2,this)}));function getBalance(_x3){return _ref2.apply(this,arguments)}return getBalance}()},{key:"getAccountInfo",value:function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(publicKey){var unsafeRes,res,result;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:_context3.next=2;return this._rpcRequest("getAccountInfo",[publicKey.toBase58()]);case 2:unsafeRes=_context3.sent;res=GetAccountInfoRpcResult(unsafeRes);if(!res.error){_context3.next=6;break}throw new Error(res.error.message);case 6:result=res.result;assert(typeof result!=="undefined");return _context3.abrupt("return",{executable:result.executable,loader:new PublicKey(result.loader),owner:new PublicKey(result.owner),tokens:result.tokens,userdata:Buffer.from(result.userdata)});case 9:case"end":return _context3.stop()}}},_callee3,this)}));function getAccountInfo(_x4){return _ref3.apply(this,arguments)}return getAccountInfo}()},{key:"confirmTransaction",value:function(){var _ref4=_asyncToGenerator(_regeneratorRuntime.mark(function _callee4(signature){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:_context4.next=2;return this._rpcRequest("confirmTransaction",[signature]);case 2:unsafeRes=_context4.sent;res=ConfirmTransactionRpcResult(unsafeRes);if(!res.error){_context4.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context4.abrupt("return",res.result);case 8:case"end":return _context4.stop()}}},_callee4,this)}));function confirmTransaction(_x5){return _ref4.apply(this,arguments)}return confirmTransaction}()},{key:"getSignatureStatus",value:function(){var _ref5=_asyncToGenerator(_regeneratorRuntime.mark(function _callee5(signature){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:_context5.next=2;return this._rpcRequest("getSignatureStatus",[signature]);case 2:unsafeRes=_context5.sent;res=GetSignatureStatusRpcResult(unsafeRes);if(!res.error){_context5.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context5.abrupt("return",res.result);case 8:case"end":return _context5.stop()}}},_callee5,this)}));function getSignatureStatus(_x6){return _ref5.apply(this,arguments)}return getSignatureStatus}()},{key:"getTransactionCount",value:function(){var _ref6=_asyncToGenerator(_regeneratorRuntime.mark(function _callee6(){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:_context6.next=2;return this._rpcRequest("getTransactionCount",[]);case 2:unsafeRes=_context6.sent;res=GetTransactionCountRpcResult(unsafeRes);if(!res.error){_context6.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context6.abrupt("return",Number(res.result));case 8:case"end":return _context6.stop()}}},_callee6,this)}));function getTransactionCount(){return _ref6.apply(this,arguments)}return getTransactionCount}()},{key:"getLastId",value:function(){var _ref7=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:_context7.next=2;return this._rpcRequest("getLastId",[]);case 2:unsafeRes=_context7.sent;res=GetLastId(unsafeRes);if(!res.error){_context7.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context7.abrupt("return",res.result);case 8:case"end":return _context7.stop()}}},_callee7,this)}));function getLastId(){return _ref7.apply(this,arguments)}return getLastId}()},{key:"getFinality",value:function(){var _ref8=_asyncToGenerator(_regeneratorRuntime.mark(function _callee8(){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:_context8.next=2;return this._rpcRequest("getFinality",[]);case 2:unsafeRes=_context8.sent;res=GetFinalityRpcResult(unsafeRes);if(!res.error){_context8.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context8.abrupt("return",Number(res.result));case 8:case"end":return _context8.stop()}}},_callee8,this)}));function getFinality(){return _ref8.apply(this,arguments)}return getFinality}()},{key:"requestAirdrop",value:function(){var _ref9=_asyncToGenerator(_regeneratorRuntime.mark(function _callee9(to,amount){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee9$(_context9){while(1){switch(_context9.prev=_context9.next){case 0:_context9.next=2;return this._rpcRequest("requestAirdrop",[to.toBase58(),amount]);case 2:unsafeRes=_context9.sent;res=RequestAirdropRpcResult(unsafeRes);if(!res.error){_context9.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");return _context9.abrupt("return",res.result);case 8:case"end":return _context9.stop()}}},_callee9,this)}));function requestAirdrop(_x7,_x8){return _ref9.apply(this,arguments)}return requestAirdrop}()},{key:"sendTransaction",value:function(){var _ref10=_asyncToGenerator(_regeneratorRuntime.mark(function _callee10(transaction){for(var _len=arguments.length,signers=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){signers[_key-1]=arguments[_key]}var _seconds,signature,attempts,startTime,_lastId,wireTransaction;return _regeneratorRuntime.wrap(function _callee10$(_context10){while(1){switch(_context10.prev=_context10.next){case 0:_seconds=(new Date).getSeconds();if(!(this._lastIdInfo.lastId!=null&&this._lastIdInfo.seconds===_seconds)){_context10.next=11;break}transaction.lastId=this._lastIdInfo.lastId;transaction.sign.apply(transaction,signers);if(transaction.signature){_context10.next=6;break}throw new Error("!signature");case 6:signature=transaction.signature.toString();if(this._lastIdInfo.transactionSignatures.includes(signature)){_context10.next=11;break}this._lastIdInfo.transactionSignatures.push(signature);if(this._disableLastIdCaching){this._lastIdInfo.seconds=-1}return _context10.abrupt("break",28);case 11:attempts=0;startTime=Date.now();case 13:_context10.next=15;return this.getLastId();case 15:_lastId=_context10.sent;if(!(this._lastIdInfo.lastId!=_lastId)){_context10.next=19;break}this._lastIdInfo={lastId:_lastId,seconds:(new Date).getSeconds(),transactionSignatures:[]};return _context10.abrupt("break",26);case 19:if(!(attempts===8)){_context10.next=21;break}throw new Error("Unable to obtain a new last id after "+(Date.now()-startTime)+"ms");case 21:_context10.next=23;return sleep(250);case 23:++attempts;case 24:_context10.next=13;break;case 26:_context10.next=0;break;case 28:wireTransaction=transaction.serialize();_context10.next=31;return this.sendRawTransaction(wireTransaction);case 31:return _context10.abrupt("return",_context10.sent);case 32:case"end":return _context10.stop()}}},_callee10,this)}));function sendTransaction(_x9){return _ref10.apply(this,arguments)}return sendTransaction}()},{key:"sendRawTransaction",value:function(){var _ref11=_asyncToGenerator(_regeneratorRuntime.mark(function _callee11(rawTransaction){var unsafeRes,res;return _regeneratorRuntime.wrap(function _callee11$(_context11){while(1){switch(_context11.prev=_context11.next){case 0:_context11.next=2;return this._rpcRequest("sendTransaction",[[].concat(_toConsumableArray(rawTransaction))]);case 2:unsafeRes=_context11.sent;res=SendTransactionRpcResult(unsafeRes);if(!res.error){_context11.next=6;break}throw new Error(res.error.message);case 6:assert(typeof res.result!=="undefined");assert(res.result);return _context11.abrupt("return",res.result);case 9:case"end":return _context11.stop()}}},_callee11,this)}));function sendRawTransaction(_x10){return _ref11.apply(this,arguments)}return sendRawTransaction}()},{key:"_wsOnOpen",value:function _wsOnOpen(){this._rpcWebSocketConnected=true;this._updateSubscriptions()}},{key:"_wsOnError",value:function _wsOnError(err){console.log("ws error:",err.message)}},{key:"_wsOnClose",value:function _wsOnClose(code,message){if(code!==1e3){console.log("ws close:",code,message)}this._rpcWebSocketConnected=false}},{key:"_wsOnAccountNotification",value:function _wsOnAccountNotification(notification){var res=AccountNotificationResult(notification);if(res.error){throw new Error(res.error.message)}var keys=_Object$keys(this._accountChangeSubscriptions).map(Number);var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=_getIterator(keys),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var id=_step.value;var sub=this._accountChangeSubscriptions[id];if(sub.subscriptionId===res.subscription){var result=res.result;assert(typeof result!=="undefined");sub.callback({executable:result.executable,loader:new PublicKey(result.loader),owner:new PublicKey(result.owner),tokens:result.tokens,userdata:Buffer.from(result.userdata)});return true}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}},{key:"_updateSubscriptions",value:function(){var _ref12=_asyncToGenerator(_regeneratorRuntime.mark(function _callee12(){var keys,_iteratorNormalCompletion2,_didIteratorError2,_iteratorError2,_iterator2,_step2,id,_iteratorNormalCompletion3,_didIteratorError3,_iteratorError3,_iterator3,_step3,_id,_accountChangeSubscri,_subscriptionId,_publicKey;return _regeneratorRuntime.wrap(function _callee12$(_context12){while(1){switch(_context12.prev=_context12.next){case 0:keys=_Object$keys(this._accountChangeSubscriptions).map(Number);if(!(keys.length===0)){_context12.next=4;break}this._rpcWebSocket.close();return _context12.abrupt("return");case 4:if(this._rpcWebSocketConnected){_context12.next=26;break}_iteratorNormalCompletion2=true;_didIteratorError2=false;_iteratorError2=undefined;_context12.prev=8;for(_iterator2=_getIterator(keys);!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){id=_step2.value;this._accountChangeSubscriptions[id].subscriptionId=null}_context12.next=16;break;case 12:_context12.prev=12;_context12.t0=_context12["catch"](8);_didIteratorError2=true;_iteratorError2=_context12.t0;case 16:_context12.prev=16;_context12.prev=17;if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}case 19:_context12.prev=19;if(!_didIteratorError2){_context12.next=22;break}throw _iteratorError2;case 22:return _context12.finish(19);case 23:return _context12.finish(16);case 24:this._rpcWebSocket.connect();return _context12.abrupt("return");case 26:_iteratorNormalCompletion3=true;_didIteratorError3=false;_iteratorError3=undefined;_context12.prev=29;_iterator3=_getIterator(keys);case 31:if(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done){_context12.next=47;break}_id=_step3.value;_accountChangeSubscri=this._accountChangeSubscriptions[_id],_subscriptionId=_accountChangeSubscri.subscriptionId,_publicKey=_accountChangeSubscri.publicKey;if(!(_subscriptionId===null)){_context12.next=44;break}_context12.prev=35;_context12.next=38;return this._rpcWebSocket.call("accountSubscribe",[_publicKey]);case 38:this._accountChangeSubscriptions[_id].subscriptionId=_context12.sent;_context12.next=44;break;case 41:_context12.prev=41;_context12.t1=_context12["catch"](35);console.log("accountSubscribe error for "+_publicKey+": "+_context12.t1.message);case 44:_iteratorNormalCompletion3=true;_context12.next=31;break;case 47:_context12.next=53;break;case 49:_context12.prev=49;_context12.t2=_context12["catch"](29);_didIteratorError3=true;_iteratorError3=_context12.t2;case 53:_context12.prev=53;_context12.prev=54;if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}case 56:_context12.prev=56;if(!_didIteratorError3){_context12.next=59;break}throw _iteratorError3;case 59:return _context12.finish(56);case 60:return _context12.finish(53);case 61:case"end":return _context12.stop()}}},_callee12,this,[[8,12,16,24],[17,,19,23],[29,49,53,61],[35,41],[54,,56,60]])}));function _updateSubscriptions(){return _ref12.apply(this,arguments)}return _updateSubscriptions}()},{key:"onAccountChange",value:function onAccountChange(publicKey,callback){var id=++this._accountChangeSubscriptionCounter;this._accountChangeSubscriptions[id]={publicKey:publicKey.toBase58(),callback:callback,subscriptionId:null};this._updateSubscriptions();return id}},{key:"removeAccountChangeListener",value:function(){var _ref13=_asyncToGenerator(_regeneratorRuntime.mark(function _callee13(id){var _subscriptionId2;return _regeneratorRuntime.wrap(function _callee13$(_context13){while(1){switch(_context13.prev=_context13.next){case 0:if(!this._accountChangeSubscriptions[id]){_context13.next=15;break}_subscriptionId2=this._accountChangeSubscriptions[id].subscriptionId;delete this._accountChangeSubscriptions[id];if(!(_subscriptionId2!==null)){_context13.next=12;break}_context13.prev=4;_context13.next=7;return this._rpcWebSocket.call("accountUnsubscribe",[_subscriptionId2]);case 7:_context13.next=12;break;case 9:_context13.prev=9;_context13.t0=_context13["catch"](4);console.log("accountUnsubscribe error:",_context13.t0.message);case 12:this._updateSubscriptions();_context13.next=16;break;case 15:throw new Error("Unknown account change id: "+id);case 16:case"end":return _context13.stop()}}},_callee13,this,[[4,9]])}));function removeAccountChangeListener(_x11){return _ref13.apply(this,arguments)}return removeAccountChangeListener}()}]);return Connection}();var sendAndConfirmTransaction=function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,transaction){for(var _len=arguments.length,signers=Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){signers[_key-2]=arguments[_key]}var sendRetries,signature,start,status,statusRetries,duration;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:sendRetries=10;signature=void 0;case 2:start=Date.now();_context.next=5;return connection.sendTransaction.apply(connection,[transaction].concat(signers));case 5:signature=_context.sent;status="SignatureNotFound";statusRetries=4;case 8:_context.next=10;return connection.getSignatureStatus(signature);case 10:status=_context.sent;if(!(status!=="SignatureNotFound")){_context.next=13;break}return _context.abrupt("break",20);case 13:_context.next=15;return sleep(500);case 15:if(!(--statusRetries<=0)){_context.next=18;break}duration=(Date.now()-start)/1e3;throw new Error("Transaction '"+signature+"' was not confirmed in "+duration.toFixed(2)+" seconds ("+status+")");case 18:_context.next=8;break;case 20:if(!(status==="Confirmed")){_context.next=22;break}return _context.abrupt("break",28);case 22:if(!(status!=="AccountInUse"||--sendRetries<=0)){_context.next=24;break}throw new Error("Transaction "+signature+" failed ("+status+")");case 24:_context.next=26;return sleep(Math.random()*100);case 26:_context.next=2;break;case 28:assert(signature!==undefined);return _context.abrupt("return",signature);case 30:case"end":return _context.stop()}}},_callee,this)}));return function sendAndConfirmTransaction(_x,_x2){return _ref.apply(this,arguments)}}();var Loader=function(){_createClass(Loader,null,[{key:"chunkSize",get:function get(){return 256}}]);function Loader(connection,programId){_classCallCheck(this,Loader);_Object$assign(this,{connection:connection,programId:programId})}_createClass(Loader,[{key:"load",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(program,data){var userdataLayout,chunkSize,offset$$1,array,transactions,bytes,userdata,transaction;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:userdataLayout=struct([u32("instruction"),u32("offset"),u32("bytesLength"),u32("bytesLengthPadding"),seq(u8("byte"),offset(u32(),-8),"bytes")]);chunkSize=Loader.chunkSize;offset$$1=0;array=data;transactions=[];case 5:if(!(array.length>0)){_context.next=19;break}bytes=array.slice(0,chunkSize);userdata=Buffer.alloc(chunkSize+16);userdataLayout.encode({instruction:0,offset:offset$$1,bytes:bytes},userdata);transaction=(new Transaction).add({keys:[program.publicKey],programId:this.programId,userdata:userdata});transactions.push(sendAndConfirmTransaction(this.connection,transaction,program));if(!(transactions.length===8)){_context.next=15;break}_context.next=14;return _Promise.all(transactions);case 14:transactions=[];case 15:offset$$1+=chunkSize;array=array.slice(chunkSize);_context.next=5;break;case 19:_context.next=21;return _Promise.all(transactions);case 21:case"end":return _context.stop()}}},_callee,this)}));function load(_x,_x2){return _ref.apply(this,arguments)}return load}()},{key:"finalize",value:function(){var _ref2=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(program){var userdataLayout,userdata,transaction;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:userdataLayout=struct([u32("instruction")]);userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:1},userdata);transaction=new Transaction;transaction.add({keys:[program.publicKey],programId:this.programId,userdata:userdata});transaction.add(SystemProgram.spawn(program.publicKey));_context2.next=8;return sendAndConfirmTransaction(this.connection,transaction,program);case 8:case"end":return _context2.stop()}}},_callee2,this)}));function finalize(_x3){return _ref2.apply(this,arguments)}return finalize}()}]);return Loader}();var BpfLoader=function(){function BpfLoader(){_classCallCheck(this,BpfLoader)}_createClass(BpfLoader,null,[{key:"load",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,owner,elf){var programAccount,transaction,loader;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:programAccount=new Account;transaction=SystemProgram.createAccount(owner.publicKey,programAccount.publicKey,1+Math.ceil(elf.length/Loader.chunkSize)+1,elf.length,BpfLoader.programId);_context.next=4;return sendAndConfirmTransaction(connection,transaction,owner);case 4:loader=new Loader(connection,BpfLoader.programId);_context.next=7;return loader.load(programAccount,elf);case 7:_context.next=9;return loader.finalize(programAccount);case 9:return _context.abrupt("return",programAccount.publicKey);case 10:case"end":return _context.stop()}}},_callee,this)}));function load(_x,_x2,_x3){return _ref.apply(this,arguments)}return load}()},{key:"programId",get:function get(){return new PublicKey("0x8000000000000000000000000000000000000000000000000000000000000000")}}]);return BpfLoader}();function serializePayment(payment){var toData=payment.to.toBuffer();var userdata=Buffer.alloc(8+toData.length);userdata.writeUInt32LE(payment.amount,0);toData.copy(userdata,8);return userdata}function serializeDate(when){var userdata=Buffer.alloc(8+20);userdata.writeUInt32LE(20,0);function iso(date){function pad(number){if(number<10){return"0"+number}return number}return date.getUTCFullYear()+"-"+pad(date.getUTCMonth()+1)+"-"+pad(date.getUTCDate())+"T"+pad(date.getUTCHours())+":"+pad(date.getUTCMinutes())+":"+pad(date.getUTCSeconds())+"Z"}userdata.write(iso(when),8);return userdata}function serializeCondition(condition){switch(condition.type){case"timestamp":{var date=serializeDate(condition.when);var _from=condition.from.toBuffer();var userdata=Buffer.alloc(4+date.length+_from.length);userdata.writeUInt32LE(0,0);date.copy(userdata,4);_from.copy(userdata,4+date.length);return userdata}case"signature":{var userdataLayout=struct([u32("condition"),publicKey("from")]);var _from2=condition.from.toBuffer();var _userdata=Buffer.alloc(4+_from2.length);userdataLayout.encode({instruction:1,from:_from2},_userdata);return _userdata}default:throw new Error("Unknown condition type: "+condition.type)}}var BudgetProgram=function(){function BudgetProgram(){_classCallCheck(this,BudgetProgram)}_createClass(BudgetProgram,null,[{key:"timestampCondition",value:function timestampCondition(from,when){return{type:"timestamp",from:from,when:when}}},{key:"signatureCondition",value:function signatureCondition(from){return{type:"signature",from:from}}},{key:"pay",value:function pay(from,program,to,amount){var userdata=Buffer.alloc(1024);var pos=0;userdata.writeUInt32LE(0,pos);pos+=4;for(var _len=arguments.length,conditions=Array(_len>4?_len-4:0),_key=4;_key<_len;_key++){conditions[_key-4]=arguments[_key]}switch(conditions.length){case 0:userdata.writeUInt32LE(0,pos);pos+=4;{var payment=serializePayment({amount:amount,to:to});payment.copy(userdata,pos);pos+=payment.length}return(new Transaction).add({keys:[from,to],programId:this.programId,userdata:userdata.slice(0,pos)});case 1:userdata.writeUInt32LE(1,pos);pos+=4;{var condition=conditions[0];var conditionData=serializeCondition(condition);conditionData.copy(userdata,pos);pos+=conditionData.length;var paymentData=serializePayment({amount:amount,to:to});paymentData.copy(userdata,pos);pos+=paymentData.length}return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata.slice(0,pos)});case 2:userdata.writeUInt32LE(2,pos);pos+=4;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=_getIterator(conditions),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _condition=_step.value;var _conditionData=serializeCondition(_condition);_conditionData.copy(userdata,pos);pos+=_conditionData.length;var _paymentData=serializePayment({amount:amount,to:to});_paymentData.copy(userdata,pos);pos+=_paymentData.length}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata.slice(0,pos)});default:throw new Error("A maximum of two conditions are support: "+conditions.length+" provided")}}},{key:"payOnBoth",value:function payOnBoth(from,program,to,amount,condition1,condition2){var userdata=Buffer.alloc(1024);var pos=0;userdata.writeUInt32LE(0,pos);pos+=4;userdata.writeUInt32LE(3,pos);pos+=4;var _arr=[condition1,condition2];for(var _i=0;_i<_arr.length;_i++){var condition=_arr[_i];var conditionData=serializeCondition(condition);conditionData.copy(userdata,pos);pos+=conditionData.length}var paymentData=serializePayment({amount:amount,to:to});paymentData.copy(userdata,pos);pos+=paymentData.length;return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata.slice(0,pos)})}},{key:"applyTimestamp",value:function applyTimestamp(from,program,to,when){var whenData=serializeDate(when);var userdata=Buffer.alloc(4+whenData.length);userdata.writeUInt32LE(1,0);whenData.copy(userdata,4);return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata})}},{key:"applySignature",value:function applySignature(from,program,to){var userdataLayout=struct([u32("instruction")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:2},userdata);return(new Transaction).add({keys:[from,program,to],programId:this.programId,userdata:userdata})}},{key:"programId",get:function get(){return new PublicKey("0x8100000000000000000000000000000000000000000000000000000000000000")}},{key:"space",get:function get(){return 128}}]);return BudgetProgram}();var NativeLoader=function(){function NativeLoader(){_classCallCheck(this,NativeLoader)}_createClass(NativeLoader,null,[{key:"load",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,owner,programName){var bytes,programAccount,transaction,loader;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:bytes=[].concat(_toConsumableArray(Buffer.from(programName)));programAccount=new Account;transaction=SystemProgram.createAccount(owner.publicKey,programAccount.publicKey,1+1+1,bytes.length+1,NativeLoader.programId);_context.next=5;return sendAndConfirmTransaction(connection,transaction,owner);case 5:loader=new Loader(connection,NativeLoader.programId);_context.next=8;return loader.load(programAccount,bytes);case 8:_context.next=10;return loader.finalize(programAccount);case 10:return _context.abrupt("return",programAccount.publicKey);case 11:case"end":return _context.stop()}}},_callee,this)}));function load(_x,_x2,_x3){return _ref.apply(this,arguments)}return load}()},{key:"programId",get:function get(){return new PublicKey("0x100000000000000000000000000000000000000000000000000000000000000")}}]);return NativeLoader}();var TokenAmount=function(_BN){_inherits(TokenAmount,_BN);function TokenAmount(){_classCallCheck(this,TokenAmount);return _possibleConstructorReturn(this,(TokenAmount.__proto__||_Object$getPrototypeOf(TokenAmount)).apply(this,arguments))}_createClass(TokenAmount,[{key:"toBuffer",value:function toBuffer(){var a=_get(TokenAmount.prototype.__proto__||_Object$getPrototypeOf(TokenAmount.prototype),"toArray",this).call(this).reverse();var b=Buffer.from(a);if(b.length===8){return b}assert(b.length<8,"TokenAmount too large");var zeroPad=Buffer.alloc(8);b.copy(zeroPad);return zeroPad}}],[{key:"fromBuffer",value:function fromBuffer(buffer){assert(buffer.length===8,"Invalid buffer length: "+buffer.length);return new BN([].concat(_toConsumableArray(buffer)).reverse().map(function(i){return("00"+i.toString(16)).slice(-2)}).join(""),16)}}]);return TokenAmount}(BN);var TokenInfoLayout=struct([uint64("supply"),u8("decimals"),rustString("name"),rustString("symbol")]);var TokenAccountInfoLayout=struct([publicKey("token"),publicKey("owner"),uint64("amount"),u8("sourceOption"),publicKey("source"),uint64("originalAmount")]);var SYSTEM_TOKEN_PROGRAM_ID=new PublicKey("0x8300000000000000000000000000000000000000000000000000000000000000");var Token=function(){function Token(connection,token){var programId=arguments.length>2&&arguments[2]!==undefined?arguments[2]:SYSTEM_TOKEN_PROGRAM_ID;_classCallCheck(this,Token);_Object$assign(this,{connection:connection,token:token,programId:programId})}_createClass(Token,[{key:"newAccount",value:function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(owner){var source=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var tokenAccount,transaction,userdataLayout,userdata,keys;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:tokenAccount=new Account;transaction=void 0;userdataLayout=struct([u32("instruction")]);userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:1},userdata);transaction=SystemProgram.createAccount(owner.publicKey,tokenAccount.publicKey,1,1+TokenAccountInfoLayout.span,this.programId);_context.next=8;return sendAndConfirmTransaction(this.connection,transaction,owner);case 8:keys=[tokenAccount.publicKey,owner.publicKey,this.token];if(source){keys.push(source)}transaction=(new Transaction).add({keys:keys,programId:this.programId,userdata:userdata});transaction.fee=0;_context.next=14;return sendAndConfirmTransaction(this.connection,transaction,tokenAccount);case 14:return _context.abrupt("return",tokenAccount.publicKey);case 15:case"end":return _context.stop()}}},_callee,this)}));function newAccount(_x2){return _ref.apply(this,arguments)}return newAccount}()},{key:"tokenInfo",value:function(){var _ref2=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(){var accountInfo,userdata,tokenInfo;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:_context2.next=2;return this.connection.getAccountInfo(this.token);case 2:accountInfo=_context2.sent;if(accountInfo.owner.equals(this.programId)){_context2.next=5;break}throw new Error("Invalid token owner: "+_JSON$stringify(accountInfo.owner));case 5:userdata=Buffer.from(accountInfo.userdata);if(!(userdata.readUInt8(0)!==1)){_context2.next=8;break}throw new Error("Invalid token userdata");case 8:tokenInfo=TokenInfoLayout.decode(userdata,1);tokenInfo.supply=TokenAmount.fromBuffer(tokenInfo.supply);return _context2.abrupt("return",tokenInfo);case 11:case"end":return _context2.stop()}}},_callee2,this)}));function tokenInfo(){return _ref2.apply(this,arguments)}return tokenInfo}()},{key:"accountInfo",value:function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(account){var accountInfo,userdata,tokenAccountInfo;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:_context3.next=2;return this.connection.getAccountInfo(account);case 2:accountInfo=_context3.sent;if(accountInfo.owner.equals(this.programId)){_context3.next=5;break}throw new Error("Invalid token account owner");case 5:userdata=Buffer.from(accountInfo.userdata);if(!(userdata.readUInt8(0)!==2)){_context3.next=8;break}throw new Error("Invalid token account userdata");case 8:tokenAccountInfo=TokenAccountInfoLayout.decode(userdata,1);tokenAccountInfo.token=new PublicKey(tokenAccountInfo.token);tokenAccountInfo.owner=new PublicKey(tokenAccountInfo.owner);tokenAccountInfo.amount=TokenAmount.fromBuffer(tokenAccountInfo.amount);if(tokenAccountInfo.sourceOption===0){tokenAccountInfo.source=null;tokenAccountInfo.originalAmount=new TokenAmount}else{tokenAccountInfo.source=new PublicKey(tokenAccountInfo.source);tokenAccountInfo.originalAmount=TokenAmount.fromBuffer(tokenAccountInfo.originalAmount)}if(tokenAccountInfo.token.equals(this.token)){_context3.next=15;break}throw new Error("Invalid token account token: "+_JSON$stringify(tokenAccountInfo.token)+" !== "+_JSON$stringify(this.token));case 15:return _context3.abrupt("return",tokenAccountInfo);case 16:case"end":return _context3.stop()}}},_callee3,this)}));function accountInfo(_x4){return _ref3.apply(this,arguments)}return accountInfo}()},{key:"transfer",value:function(){var _ref4=_asyncToGenerator(_regeneratorRuntime.mark(function _callee4(owner,source,destination,amount){return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:_context4.t0=sendAndConfirmTransaction;_context4.t1=this.connection;_context4.t2=new Transaction;_context4.next=5;return this.transferInstruction(owner.publicKey,source,destination,amount);case 5:_context4.t3=_context4.sent;_context4.t4=_context4.t2.add.call(_context4.t2,_context4.t3);_context4.t5=owner;_context4.next=10;return(0,_context4.t0)(_context4.t1,_context4.t4,_context4.t5);case 10:return _context4.abrupt("return",_context4.sent);case 11:case"end":return _context4.stop()}}},_callee4,this)}));function transfer(_x5,_x6,_x7,_x8){return _ref4.apply(this,arguments)}return transfer}()},{key:"approve",value:function(){var _ref5=_asyncToGenerator(_regeneratorRuntime.mark(function _callee5(owner,account,delegate,amount){return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:_context5.next=2;return sendAndConfirmTransaction(this.connection,(new Transaction).add(this.approveInstruction(owner.publicKey,account,delegate,amount)),owner);case 2:case"end":return _context5.stop()}}},_callee5,this)}));function approve(_x9,_x10,_x11,_x12){return _ref5.apply(this,arguments)}return approve}()},{key:"revoke",value:function revoke(owner,account,delegate){return this.approve(owner,account,delegate,0)}},{key:"setOwner",value:function(){var _ref6=_asyncToGenerator(_regeneratorRuntime.mark(function _callee6(owner,account,newOwner){return _regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:_context6.next=2;return sendAndConfirmTransaction(this.connection,(new Transaction).add(this.setOwnerInstruction(owner.publicKey,account,newOwner)),owner);case 2:case"end":return _context6.stop()}}},_callee6,this)}));function setOwner(_x13,_x14,_x15){return _ref6.apply(this,arguments)}return setOwner}()},{key:"transferInstruction",value:function(){var _ref7=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(owner,source,destination,amount){var accountInfo,userdataLayout,userdata,keys;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:_context7.next=2;return this.accountInfo(source);case 2:accountInfo=_context7.sent;if(owner.equals(accountInfo.owner)){_context7.next=5;break}throw new Error("Account owner mismatch");case 5:userdataLayout=struct([u32("instruction"),uint64("amount")]);userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:2,amount:new TokenAmount(amount).toBuffer()},userdata);keys=[owner,source,destination];if(accountInfo.source){keys.push(accountInfo.source)}return _context7.abrupt("return",new TransactionInstruction({keys:keys,programId:this.programId,userdata:userdata}));case 11:case"end":return _context7.stop()}}},_callee7,this)}));function transferInstruction(_x16,_x17,_x18,_x19){return _ref7.apply(this,arguments)}return transferInstruction}()},{key:"approveInstruction",value:function approveInstruction(owner,account,delegate,amount){var userdataLayout=struct([u32("instruction"),uint64("amount")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:3,amount:new TokenAmount(amount).toBuffer()},userdata);return new TransactionInstruction({keys:[owner,account,delegate],programId:this.programId,userdata:userdata})}},{key:"revokeInstruction",value:function revokeInstruction(owner,account,delegate){return this.approveInstruction(owner,account,delegate,0)}},{key:"setOwnerInstruction",value:function setOwnerInstruction(owner,account,newOwner){var userdataLayout=struct([u32("instruction")]);var userdata=Buffer.alloc(userdataLayout.span);userdataLayout.encode({instruction:4},userdata);return new TransactionInstruction({keys:[owner,account,newOwner],programId:this.programId,userdata:userdata})}}],[{key:"createNewToken",value:function(){var _ref8=_asyncToGenerator(_regeneratorRuntime.mark(function _callee8(connection,owner,supply,name,symbol,decimals){var programId=arguments.length>6&&arguments[6]!==undefined?arguments[6]:SYSTEM_TOKEN_PROGRAM_ID;var tokenAccount,token,initialAccountPublicKey,transaction,userdataLayout,userdata,encodeLength;return _regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:tokenAccount=new Account;token=new Token(connection,tokenAccount.publicKey,programId);_context8.next=4;return token.newAccount(owner,null);case 4:initialAccountPublicKey=_context8.sent;transaction=void 0;userdataLayout=struct([u32("instruction"),uint64("supply"),u8("decimals"),rustString("name"),rustString("symbol")]);userdata=Buffer.alloc(1024);encodeLength=userdataLayout.encode({instruction:0,supply:supply.toBuffer(),decimals:decimals,name:name,symbol:symbol},userdata);userdata=userdata.slice(0,encodeLength);transaction=SystemProgram.createAccount(owner.publicKey,tokenAccount.publicKey,1,1+userdata.length,programId);_context8.next=13;return sendAndConfirmTransaction(connection,transaction,owner);case 13:transaction=(new Transaction).add({keys:[tokenAccount.publicKey,initialAccountPublicKey],programId:programId,userdata:userdata});transaction.fee=0;_context8.next=17;return sendAndConfirmTransaction(connection,transaction,tokenAccount);case 17:return _context8.abrupt("return",[token,initialAccountPublicKey]);case 18:case"end":return _context8.stop()}}},_callee8,this)}));function createNewToken(_x20,_x21,_x22,_x23,_x24,_x25){return _ref8.apply(this,arguments)}return createNewToken}()}]);return Token}();var sendAndConfirmRawTransaction=function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(connection,rawTransaction){var start,signature,status,statusRetries,duration;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:start=Date.now();_context.next=3;return connection.sendRawTransaction(rawTransaction);case 3:signature=_context.sent;status="";statusRetries=4;case 6:_context.next=8;return connection.getSignatureStatus(signature);case 8:status=_context.sent;if(!(status!=="SignatureNotFound")){_context.next=11;break}return _context.abrupt("break",18);case 11:_context.next=13;return sleep(500);case 13:if(!(--statusRetries<=0)){_context.next=16;break}duration=(Date.now()-start)/1e3;throw new Error("Raw Transaction '"+signature+"' was not confirmed in "+duration.toFixed(2)+" seconds ("+status+")");case 16:_context.next=6;break;case 18:if(!(status==="Confirmed")){_context.next=20;break}return _context.abrupt("return",signature);case 20:throw new Error("Raw transaction "+signature+" failed ("+status+")");case 21:case"end":return _context.stop()}}},_callee,this)}));return function sendAndConfirmRawTransaction(_x,_x2){return _ref.apply(this,arguments)}}();export{Account,BpfLoader,BudgetProgram,Connection,Loader,NativeLoader,PublicKey,SystemProgram,Token,TokenAmount,Transaction,TransactionInstruction,sendAndConfirmTransaction,sendAndConfirmRawTransaction};
//# sourceMappingURL=index.esm.js.map
{
"name": "@solana/web3.js",
"version": "0.13.4",
"version": "0.13.5",
"description": "Solana Javascript API",

@@ -38,29 +38,32 @@ "keywords": [

"scripts": {
"bpf-sdk:install": "set -ex; npm run bpf-sdk:fetch; npm run bpf-sdk:extract",
"bpf-sdk:extract": "test -d bpf-sdk || tar jxvf bpf-sdk.tar.bz2",
"bpf-sdk:fetch": "test -f bpf-sdk.tar.bz2 || curl http://solana-sdk.s3.amazonaws.com/$npm_package_solana_channel/bpf-sdk.tar.bz2 -o bpf-sdk.tar.bz2",
"bpf-sdk:remove-symlinks": "find bpf-sdk -type l -print -exec cp {} {}.tmp \\; -exec mv {}.tmp {} \\;",
"build": "cross-env NODE_ENV=production rollup -c",
"clean": "rimraf ./coverage ./lib",
"codecov": "set -ex; npm run test:cover; cat ./coverage/lcov.info | codecov",
"dev": "cross-env NODE_ENV=development rollup -c",
"build": "cross-env NODE_ENV=production rollup -c",
"doc": "esdoc; node -p '\"\\nDocumentation coverage: \" + require(\"./doc/coverage.json\").coverage'",
"doc": "set -ex; esdoc; node -p '\"\\nDocumentation coverage: \" + require(\"./doc/coverage.json\").coverage'",
"doc:watch": "watch 'npm run doc' . --wait=1 --ignoreDirectoryPattern=/doc/",
"test": "cross-env NODE_ENV=test jest --useStderr",
"test:live": "cross-env NODE_ENV=test TEST_LIVE=1 jest --useStderr",
"test:watch": "cross-env NODE_ENV=test jest --watch --useStderr",
"test:cover": "cross-env NODE_ENV=test jest --coverage --useStderr",
"codecov": "npm run test:cover && cat ./coverage/lcov.info | codecov",
"fetch-bpf-sdk": "test -d bpf-sdk || curl http://solana-sdk.s3.amazonaws.com/$npm_package_solana_channel/bpf-sdk.tar.bz2 | tar jxv",
"remove-bpf-sdk-symlinks": "find bpf-sdk -type l -print -exec cp {} {}.tmp \\; -exec mv {}.tmp {} \\;",
"flow": "flow stop; flow-typed install jest@22 && flow",
"examples": "set -ex; for example in examples/*.js; do node $example; done",
"flow": "set -ex; flow stop; flow-typed install jest@22; flow",
"flow:stop": "flow stop",
"flow:watch": "flow stop; watch 'flow' . --wait=1 --ignoreDirectoryPattern=/doc/",
"flow:stop": "flow stop",
"lint": "npm run pretty && eslint .",
"install": "npm run bpf-sdk:install",
"lint": "set -ex; npm run pretty; eslint .",
"lint:fix": "npm run lint -- --fix",
"lint:watch": "watch 'npm run lint:fix' . --wait=1 --ignoreDirectoryPattern=/doc/",
"localnet:down": "bin/localnet.sh down",
"localnet:logs": "bin/localnet.sh logs -f",
"localnet:up": "bin/localnet.sh up $npm_package_solana_channel",
"localnet:down": "bin/localnet.sh down",
"localnet:update": "bin/localnet.sh update $npm_package_solana_channel",
"localnet:logs": "bin/localnet.sh logs -f",
"ok": "npm run lint && npm run flow && npm run test && npm run doc",
"ok": "set -ex; npm run lint; npm run flow; npm run test; npm run doc",
"prepare": "set -ex; npm run clean; npm run bpf-sdk:install; npm run build; rm -rf bpf-sdk; npm rum bpf-sdk:extract; npm run bpf-sdk:remove-symlinks",
"pretty": "prettier --write '{,{examples,src,test}/**/}*.js'",
"prepare": "npm run clean && npm run ok && npm run fetch-bpf-sdk && npm run remove-bpf-sdk-symlinks && npm run build",
"examples": "set -ex; for example in examples/*.js; do node $example; done",
"re": "semantic-release --repository-url git@github.com:solana-labs/solana-web3.js.git"
"re": "semantic-release --repository-url git@github.com:solana-labs/solana-web3.js.git",
"test": "cross-env NODE_ENV=test jest --useStderr",
"test:cover": "cross-env NODE_ENV=test jest --coverage --useStderr",
"test:live": "cross-env NODE_ENV=test TEST_LIVE=1 jest --useStderr",
"test:watch": "cross-env NODE_ENV=test jest --watch --useStderr"
},

@@ -100,3 +103,3 @@ "dependencies": {

"eslint-plugin-import": "2.14.0",
"eslint-plugin-jest": "22.0.1",
"eslint-plugin-jest": "22.1.0",
"eslint-plugin-prettier": "^3.0.0",

@@ -103,0 +106,0 @@ "flow-bin": "0.87.0",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc