program.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. import { PublicKey } from "@solana/web3.js";
  2. import { Program, AnchorProvider } from "@coral-xyz/anchor";
  3. import { SplRecordCoder } from "./coder";
  4. export const SPL_RECORD_PROGRAM_ID = new PublicKey(
  5. "ReciQBw6sQKH9TVVJQDnbnJ5W7FP539tPHjZhRF4E9r"
  6. );
  7. interface GetProgramParams {
  8. programId?: PublicKey;
  9. provider?: AnchorProvider;
  10. }
  11. export function splRecordProgram(
  12. params?: GetProgramParams
  13. ): Program<SplRecord> {
  14. return new Program<SplRecord>(
  15. IDL,
  16. params?.programId ?? SPL_RECORD_PROGRAM_ID,
  17. params?.provider,
  18. new SplRecordCoder(IDL)
  19. );
  20. }
  21. type SplRecord = {
  22. version: "0.1.0";
  23. name: "spl_record";
  24. instructions: [
  25. {
  26. name: "initialize";
  27. accounts: [
  28. {
  29. name: "recordAccount";
  30. isMut: true;
  31. isSigner: false;
  32. },
  33. {
  34. name: "authority";
  35. isMut: false;
  36. isSigner: false;
  37. }
  38. ];
  39. args: [];
  40. },
  41. {
  42. name: "write";
  43. accounts: [
  44. {
  45. name: "recordAccount";
  46. isMut: true;
  47. isSigner: false;
  48. },
  49. {
  50. name: "signer";
  51. isMut: false;
  52. isSigner: true;
  53. }
  54. ];
  55. args: [
  56. {
  57. name: "offset";
  58. type: "u64";
  59. },
  60. {
  61. name: "data";
  62. type: "bytes";
  63. }
  64. ];
  65. },
  66. {
  67. name: "setAuthority";
  68. accounts: [
  69. {
  70. name: "recordAccount";
  71. isMut: true;
  72. isSigner: false;
  73. },
  74. {
  75. name: "signer";
  76. isMut: false;
  77. isSigner: true;
  78. },
  79. {
  80. name: "newAuthority";
  81. isMut: false;
  82. isSigner: false;
  83. }
  84. ];
  85. args: [];
  86. },
  87. {
  88. name: "closeAccount";
  89. accounts: [
  90. {
  91. name: "recordAccount";
  92. isMut: true;
  93. isSigner: false;
  94. },
  95. {
  96. name: "signer";
  97. isMut: false;
  98. isSigner: true;
  99. },
  100. {
  101. name: "receiver";
  102. isMut: true;
  103. isSigner: false;
  104. }
  105. ];
  106. args: [];
  107. }
  108. ];
  109. accounts: [
  110. {
  111. name: "recordData";
  112. type: {
  113. kind: "struct";
  114. fields: [
  115. {
  116. name: "version";
  117. type: "u8";
  118. },
  119. {
  120. name: "authority";
  121. type: "publicKey";
  122. },
  123. {
  124. name: "data";
  125. type: {
  126. defined: "Data";
  127. };
  128. }
  129. ];
  130. };
  131. }
  132. ];
  133. types: [
  134. {
  135. name: "Data";
  136. type: {
  137. kind: "struct";
  138. fields: [
  139. {
  140. name: "bytes";
  141. type: {
  142. array: ["u8", 8];
  143. };
  144. }
  145. ];
  146. };
  147. }
  148. ];
  149. errors: [
  150. {
  151. code: 0;
  152. name: "IncorrectAuthority";
  153. msg: "Incorrect authority provided on update or delete";
  154. },
  155. {
  156. code: 1;
  157. name: "Overflow";
  158. msg: "Calculation overflow";
  159. }
  160. ];
  161. };
  162. const IDL: SplRecord = {
  163. version: "0.1.0",
  164. name: "spl_record",
  165. instructions: [
  166. {
  167. name: "initialize",
  168. accounts: [
  169. {
  170. name: "recordAccount",
  171. isMut: true,
  172. isSigner: false,
  173. },
  174. {
  175. name: "authority",
  176. isMut: false,
  177. isSigner: false,
  178. },
  179. ],
  180. args: [],
  181. },
  182. {
  183. name: "write",
  184. accounts: [
  185. {
  186. name: "recordAccount",
  187. isMut: true,
  188. isSigner: false,
  189. },
  190. {
  191. name: "signer",
  192. isMut: false,
  193. isSigner: true,
  194. },
  195. ],
  196. args: [
  197. {
  198. name: "offset",
  199. type: "u64",
  200. },
  201. {
  202. name: "data",
  203. type: "bytes",
  204. },
  205. ],
  206. },
  207. {
  208. name: "setAuthority",
  209. accounts: [
  210. {
  211. name: "recordAccount",
  212. isMut: true,
  213. isSigner: false,
  214. },
  215. {
  216. name: "signer",
  217. isMut: false,
  218. isSigner: true,
  219. },
  220. {
  221. name: "newAuthority",
  222. isMut: false,
  223. isSigner: false,
  224. },
  225. ],
  226. args: [],
  227. },
  228. {
  229. name: "closeAccount",
  230. accounts: [
  231. {
  232. name: "recordAccount",
  233. isMut: true,
  234. isSigner: false,
  235. },
  236. {
  237. name: "signer",
  238. isMut: false,
  239. isSigner: true,
  240. },
  241. {
  242. name: "receiver",
  243. isMut: true,
  244. isSigner: false,
  245. },
  246. ],
  247. args: [],
  248. },
  249. ],
  250. accounts: [
  251. {
  252. name: "recordData",
  253. type: {
  254. kind: "struct",
  255. fields: [
  256. {
  257. name: "version",
  258. type: "u8",
  259. },
  260. {
  261. name: "authority",
  262. type: "publicKey",
  263. },
  264. {
  265. name: "data",
  266. type: {
  267. defined: "Data",
  268. },
  269. },
  270. ],
  271. },
  272. },
  273. ],
  274. types: [
  275. {
  276. name: "Data",
  277. type: {
  278. kind: "struct",
  279. fields: [
  280. {
  281. name: "bytes",
  282. type: {
  283. array: ["u8", 8],
  284. },
  285. },
  286. ],
  287. },
  288. },
  289. ],
  290. errors: [
  291. {
  292. code: 0,
  293. name: "IncorrectAuthority",
  294. msg: "Incorrect authority provided on update or delete",
  295. },
  296. {
  297. code: 1,
  298. name: "Overflow",
  299. msg: "Calculation overflow",
  300. },
  301. ],
  302. };