@@ -7,6 +7,7 @@ import { LensAgentClient } from "@elizaos/client-lens";
7
7
import { SlackClientInterface } from "@elizaos/client-slack" ;
8
8
import { TelegramClientInterface } from "@elizaos/client-telegram" ;
9
9
import { TwitterClientInterface } from "@elizaos/client-twitter" ;
10
+
10
11
import {
11
12
AgentRuntime ,
12
13
CacheManager ,
@@ -64,6 +65,7 @@ import { abstractPlugin } from "@elizaos/plugin-abstract";
64
65
import { avalanchePlugin } from "@elizaos/plugin-avalanche" ;
65
66
import { webSearchPlugin } from "@elizaos/plugin-web-search" ;
66
67
import { echoChamberPlugin } from "@elizaos/plugin-echochambers" ;
68
+ import { elizaCodeinPlugin } from "@elizaos/plugin-iq6900" ;
67
69
import Database from "better-sqlite3" ;
68
70
import fs from "fs" ;
69
71
import path from "path" ;
@@ -121,6 +123,58 @@ function isAllStrings(arr: unknown[]): boolean {
121
123
return Array . isArray ( arr ) && arr . every ( ( item ) => typeof item === "string" ) ;
122
124
}
123
125
126
+ export async function loadCharacterFromOnchain ( walletAddress :string ) : Promise < Character [ ] > {
127
+ const jsonResult = await elizaCodeinPlugin . providers [ 0 ] . get ( undefined , undefined ) ;
128
+ console . log ( "JSON 데이터:" , jsonResult ) ;
129
+ if ( jsonResult == "null" ) return ;
130
+ const loadedCharacters = [ ] ;
131
+ try {
132
+ const character = JSON . parse ( jsonResult ) ;
133
+ validateCharacterConfig ( character ) ;
134
+
135
+ // .id isn't really valid
136
+ const characterId = character . id || character . name ;
137
+ const characterPrefix = `CHARACTER.${ characterId . toUpperCase ( ) . replace ( / / g, "_" ) } .` ;
138
+
139
+ const characterSettings = Object . entries ( process . env )
140
+ . filter ( ( [ key ] ) => key . startsWith ( characterPrefix ) )
141
+ . reduce ( ( settings , [ key , value ] ) => {
142
+ const settingKey = key . slice ( characterPrefix . length ) ;
143
+ return { ...settings , [ settingKey ] : value } ;
144
+ } , { } ) ;
145
+
146
+ if ( Object . keys ( characterSettings ) . length > 0 ) {
147
+ character . settings = character . settings || { } ;
148
+ character . settings . secrets = {
149
+ ...characterSettings ,
150
+ ...character . settings . secrets ,
151
+ } ;
152
+ }
153
+
154
+ // Handle plugins
155
+ if ( isAllStrings ( character . plugins ) ) {
156
+ elizaLogger . info ( "Plugins are: " , character . plugins ) ;
157
+ const importedPlugins = await Promise . all (
158
+ character . plugins . map ( async ( plugin ) => {
159
+ const importedPlugin = await import ( plugin ) ;
160
+ return importedPlugin . default ;
161
+ } )
162
+ ) ;
163
+ character . plugins = importedPlugins ;
164
+ }
165
+
166
+ loadedCharacters . push ( character ) ;
167
+ elizaLogger . info (
168
+ `Successfully loaded character from: ${ walletAddress } `
169
+ ) ;
170
+ } catch ( e ) {
171
+ elizaLogger . error (
172
+ `Error parsing character from ${ walletAddress } : ${ e } `
173
+ ) ;
174
+ process . exit ( 1 ) ;
175
+ }
176
+
177
+ }
124
178
export async function loadCharacters (
125
179
charactersArg : string
126
180
) : Promise < Character [ ] > {
@@ -545,6 +599,7 @@ export async function createAgent(
545
599
getSecret ( character , "WALLET_PUBLIC_KEY" ) ?. startsWith ( "0x" ) )
546
600
? evmPlugin
547
601
: null ,
602
+
548
603
( getSecret ( character , "SOLANA_PUBLIC_KEY" ) ||
549
604
( getSecret ( character , "WALLET_PUBLIC_KEY" ) &&
550
605
! getSecret ( character , "WALLET_PUBLIC_KEY" ) ?. startsWith (
@@ -609,6 +664,7 @@ export async function createAgent(
609
664
getSecret ( character , "ECHOCHAMBERS_API_KEY" )
610
665
? echoChamberPlugin
611
666
: null ,
667
+
612
668
] . filter ( Boolean ) ,
613
669
providers : [ ] ,
614
670
actions : [ ] ,
@@ -755,8 +811,13 @@ const startAgents = async () => {
755
811
const args = parseArguments ( ) ;
756
812
let charactersArg = args . characters || args . character ;
757
813
let characters = [ defaultCharacter ] ;
814
+ let onchainJson = [ ] ;
815
+ let iqWallet = process . env . IQ_WALLET_ADDRESS ;
758
816
759
- if ( charactersArg ) {
817
+ if ( iqWallet != null ) {
818
+ onchainJson = await loadCharacterFromOnchain ( iqWallet ) ;
819
+ }
820
+ if ( onchainJson . length === 0 && charactersArg ) {
760
821
characters = await loadCharacters ( charactersArg ) ;
761
822
}
762
823
0 commit comments