program.ts 5.4 KB

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