Skip to content

Commit e856374

Browse files
committed
wip: update
1 parent cdabc72 commit e856374

File tree

20 files changed

+825
-269
lines changed

20 files changed

+825
-269
lines changed

packages/neuron-ui/src/components/PaymentChannel/api.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export async function getChannels(publicKey: string, address: string) {
5151
}
5252
console.log(actionRes.result);
5353
const channels = actionRes.result?.channels.states.map((channelState, idx) => {
54-
// todo 过滤 isFinal 为true
5554
const { id: idObj, version, app, allocation, data, isFinal } = channelState;
5655
const id = idObj.data;
5756
const alloc = wire.Allocation.create(allocation);

packages/neuron-ui/src/components/PaymentChannel/components/Console/index.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export default function PerunConsole(props: PerunConsoleProps) {
7171

7272
const channels = useMemo(() => {
7373
return patialChannelInfos.map(item => {
74-
if(channelMap[item.id]) {
74+
if (channelMap[item.id]) {
7575
return {
7676
...item,
7777
peer: channelMap[item.id].peer,
@@ -252,9 +252,16 @@ export default function PerunConsole(props: PerunConsoleProps) {
252252

253253
openChannel(myPubKey, myAddress, peerUser, payload, 1000)
254254
.then(res => {
255-
console.log("openChannel return", res);
256-
debugger
257255
if (!isSuccessResponse(res)) {
256+
// remove from pending channels
257+
setPendingChannels(prev => {
258+
return prev.filter(item => item.id !== channelInfo.id)
259+
})
260+
// remove temp Channel ID
261+
setChannelMap(prev => {
262+
delete prev[channelInfo.id];
263+
return { ...prev }
264+
})
258265
showErrorMessage('Error', errorFormatter(res.message, t))
259266
return;
260267
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
2+
3+
import { useTranslation } from 'react-i18next'
4+
import Button from 'widgets/Button'
5+
import Dialog from 'widgets/Dialog'
6+
7+
type PerunRequestListProps = {
8+
requests: State.PerunRequest[]
9+
onClose: () => void
10+
}
11+
export default function PerunRequestList(props: PerunRequestListProps) {
12+
const { requests, onClose } = props
13+
const [t] = useTranslation()
14+
return (
15+
<>
16+
<Dialog show title={t('perun.channel-creation-request-list')} showFooter={false} onCancel={onClose}>
17+
<div>
18+
{/* channel reqeust list */}
19+
</div>
20+
</Dialog>
21+
</>
22+
)
23+
}
24+
25+
26+
function OpenChannelRequestForm({ request }: { request: State.PerunRequest }) {
27+
const [t] = useTranslation()
28+
29+
return (
30+
<div>
31+
<div>Open Channel Request from XXX</div>
32+
<div className='flex flex-row items-center'>
33+
<div>
34+
<div>My Token</div>
35+
<div>xx.xx</div>
36+
</div>
37+
<div>
38+
<div>Peer Token</div>
39+
<div>yy.yy</div>
40+
</div>
41+
</div>
42+
<div>
43+
<Button
44+
type="cancel"
45+
onClick={() => {
46+
// rejectPerunRequest(request, 'User rejected')
47+
}}
48+
>
49+
{t('perun.reject')}
50+
</Button>
51+
<Button
52+
type="primary"
53+
onClick={() => {
54+
// setCurrentRequest(request)
55+
// setShowPasswordDialog(true)
56+
}}
57+
>
58+
{t('perun.accept')}
59+
</Button>
60+
</div>
61+
</div>
62+
)
63+
}

packages/neuron-ui/src/components/PerunCreationRequestList/index.tsx

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,22 @@ import { PasswordDialog } from 'components/SignAndVerify'
3232
import { deletePerunRequest } from 'states/stateProvider/actionCreators'
3333
import styles from './perunCreationRequestList.module.scss'
3434
import { getCompatibleTx } from './utils'
35-
import { hexToUint8Array } from 'utils/bufferConvert'
3635

3736
export const PerunCreationRequestList = ({
3837
requests,
3938
onCancel,
4039
walletID,
4140
}: {
42-
requests: State.PerunRequest[]
41+
requests: Perun.ReadableMessage.Request[]
4342
onCancel: () => void
4443
walletID: string
4544
}) => {
4645
const [t] = useTranslation()
4746
const [showPasswordDialog, setShowPasswordDialog] = useState(false)
48-
const [currentRequest, setCurrentRequest] = useState<State.PerunRequest | null>(null)
47+
const [currentRequest, setCurrentRequest] = useState<Perun.ReadableMessage.Request | null>(null)
4948
const dispatch = useDispatch()
5049

51-
const rejectPerunRequest = async (request: State.PerunRequest, reason: string) => {
50+
const rejectPerunRequest = async (request: Perun.ReadableMessage.Request, reason: string) => {
5251
deletePerunRequest(request)(dispatch)
5352
await respondPerunRequest({
5453
type: request.type,
@@ -61,13 +60,14 @@ export const PerunCreationRequestList = ({
6160
})
6261
}
6362

64-
const renderPerunRequest = (perunRequest: State.PerunRequest) => {
63+
const renderPerunRequest = (perunRequest: Perun.ReadableMessage.Request) => {
6564
switch (perunRequest.type) {
66-
case 'openChannelRequest': {
65+
case "OpenChannel": {
6766
console.log("PerunCreationRequestList open channel", perunRequest.request);
67+
const request = perunRequest.request;
6868
return (
6969
<>
70-
<h3>receive a open channel request</h3>
70+
<h3>Open Channel Request from {request.participant.address}</h3>
7171
<p>{`Channel ID: `}</p>
7272
<p>{`State: `}</p>
7373
<p>{`Version: `}</p>
@@ -77,8 +77,8 @@ export const PerunCreationRequestList = ({
7777
)
7878
}
7979
case 'SignMessage': {
80-
const request = perunRequest.request as State.PerunSignMessageRequest
81-
const address = new TextDecoder().decode(hexToUint8Array(request.pubkey))
80+
const request = perunRequest.request
81+
const address = request.pubkey
8282
// const content = bytesToHex(new Uint8Array(request.request.data.data))
8383
return (
8484
<h2 className={styles.content}>
@@ -97,8 +97,7 @@ export const PerunCreationRequestList = ({
9797
}
9898
case 'SignTransaction': {
9999
const request = perunRequest.request as State.PerunSignTransactionRequest
100-
const { identifier, transaction } = request
101-
const address = scriptToAddress(identifier, { isMainnet: false })
100+
const { identifier: address, transaction } = request
102101
// const content = JSON.stringify(transaction)
103102
return (
104103
<h2 className={styles.content}>
@@ -159,12 +158,35 @@ export const PerunCreationRequestList = ({
159158
return null
160159
}
161160
}
161+
const handleOpenChannelRequest = async (perunRequest: Perun.ReadableMessage.Request) => {
162+
deletePerunRequest(perunRequest)(dispatch)
163+
await respondPerunRequest({
164+
type: "OpenChannel",
165+
response: {
166+
data: true,
167+
},
168+
})
169+
setCurrentRequest(null)
170+
}
171+
const handleUpdateNotificatoinRequest = async (perunRequest: Perun.ReadableMessage.Request) => {
172+
deletePerunRequest(perunRequest)(dispatch)
173+
await respondPerunRequest({
174+
type: "UpdateNotification",
175+
response: {
176+
data: true,
177+
},
178+
})
179+
setCurrentRequest(null)
180+
}
162181

163182
const handleSigningRequest = async (password: string) => {
164-
const handleSignMessage = async (perunRequest: State.PerunRequest) => {
165-
const request = perunRequest.request as State.PerunSignMessageRequest
183+
184+
185+
186+
const handleSignMessage = async (perunRequest: Perun.ReadableMessage.Request) => {
187+
const request = perunRequest.request as Perun.ReadableMessage.SignMessageRequest
166188
// Uint8Array -> String
167-
const address = new TextDecoder().decode(hexToUint8Array(request.pubkey))
189+
const address = request.pubkey
168190
console.log('signing request for address----------', address)
169191
// const msgToSign = bytesToHex(new Uint8Array(request.data.data))
170192
// TODO: It would be nice to have a decoder for the Perun encoded messages.
@@ -197,7 +219,7 @@ export const PerunCreationRequestList = ({
197219
return res
198220
}
199221

200-
const handleSignTransaction = async (perunRequest: State.PerunRequest) => {
222+
const handleSignTransaction = async (perunRequest: Perun.ReadableMessage.Request) => {
201223
const request = perunRequest.request as State.PerunSignTransactionRequest
202224
console.log('handleSignTransaction', request)
203225
console.log('inputs', request.transaction.inputs)
@@ -241,10 +263,14 @@ export const PerunCreationRequestList = ({
241263
}
242264

243265
switch (currentRequest.type) {
266+
// case "OpenChannel":
267+
// return handleOpenChannelRequest(currentRequest)
244268
case 'SignMessage':
245269
return handleSignMessage(currentRequest)
246270
case 'SignTransaction':
247-
return handleSignTransaction(currentRequest) as any
271+
return handleSignTransaction(currentRequest)
272+
// case "UpdateNotification":
273+
// return handleUpdateNotificatoinRequest(currentRequest);
248274
default:
249275
}
250276
}
@@ -264,6 +290,14 @@ export const PerunCreationRequestList = ({
264290
type="primary"
265291
onClick={() => {
266292
setCurrentRequest(request)
293+
if(request.type === "OpenChannel") {
294+
handleOpenChannelRequest(request)
295+
return;
296+
}
297+
if(request.type === "UpdateNotification") {
298+
handleUpdateNotificatoinRequest(request)
299+
return;
300+
}
267301
setShowPasswordDialog(true)
268302
}}
269303
>

packages/neuron-ui/src/states/stateProvider/actionCreators/perun.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export const initPerunState = () => (dispatch: StateDispatch) => {
99
})
1010
}
1111

12-
export const addPerunRequest = (request: State.PerunRequest) => (dispatch: StateDispatch) => {
12+
export const addPerunRequest = (request: Perun.ReadableMessage.Request) => (dispatch: StateDispatch) => {
1313
const requests = perunRequestsCache.load()
1414
perunRequestsCache.save([...requests, request])
1515
dispatch({
@@ -18,7 +18,7 @@ export const addPerunRequest = (request: State.PerunRequest) => (dispatch: State
1818
})
1919
}
2020

21-
export const deletePerunRequest = (request: State.PerunRequest) => (dispatch: StateDispatch) => {
21+
export const deletePerunRequest = (request: Perun.ReadableMessage.Request) => (dispatch: StateDispatch) => {
2222
const requests = perunRequestsCache.load()
2323
console.log('deletePerunRequest', requests, request)
2424
perunRequestsCache.save(requests.filter(r => r.timestamp !== request.timestamp))

packages/neuron-ui/src/types/App/index.d.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,7 @@ declare namespace State {
362362
}
363363

364364
interface PerunRequest {
365-
// todo align with IPCMessageRequest
366-
type: 'openChannelRequest' | 'SignMessage' | 'SignTransaction' | 'UpdateNotification'
365+
type: Perun.RequestType
367366
request?: PerunSignMessageRequest | PerunSignTransactionRequest
368367
timestamp: number
369368
}

packages/neuron-ui/src/types/Controller/index.d.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,7 @@ declare namespace Controller {
226226
| { type: "restore", payload: RestoreChannelsParams }
227227

228228
interface RespondPerunRequestParams {
229-
// todo align with IPCMessageReqeust
230-
type: 'openChannelRequest' | 'SignMessage' | 'SignTransaction' | 'UpdateNotification'
229+
type: Perun.RequestType
231230
response: { rejected?: { reason: string }; data: any }
232231
}
233232

packages/neuron-ui/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818
"allowJs": true,
1919
"allowSyntheticDefaultImports": true
2020
},
21-
"include": ["src", "vitest-setup.js"]
21+
"include": ["src", "vitest-setup.js", "../../types/*.d.ts"]
2222
}

packages/neuron-wallet/src/controllers/perun.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export default class PerunController {
151151
})
152152

153153
const res = await PerunController.serviceClient
154-
.openChannel(params.me, params.peer, alloc, params.challengeDuration, new Uint8Array(mol.Uint8.encode(123)))
154+
.openChannel(params.me, params.peer, alloc, params.challengeDuration, mol.Uint32.encode(123))
155155
.catch(e => {
156156
logger.info('PerunController: openChannel-----error-----', e)
157157
return {

packages/neuron-wallet/src/services/perun/server/wallet-backend.ts

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,8 @@ const log = (...messages: any[]) => {
2020

2121
const genReqeustId = (prefix: string = '') => `${prefix}_${`${Math.random()}`.slice(2, 8)}`;
2222

23-
const stringifyBuffer = (obj: any) => {
24-
return JSON.parse(JSON.stringify(obj, (_, value) => {
25-
// if value if Buffer
26-
if (value?.type === 'Buffer' && value.data) {
27-
return "0x" + Buffer.from(value.data).toString("hex");
28-
}
29-
return value;
30-
}))
31-
}
32-
3323
const commonHandleResponse = <APIName extends keyof WalletBackend<{}>,>(
34-
type: APIName,
24+
type: Perun.RequestType,
3525
requestId: string,
3626
req: Parameters<WalletBackend<{}>[APIName]>[0],
3727
responseHandler = (a: any) => a
@@ -43,7 +33,7 @@ const commonHandleResponse = <APIName extends keyof WalletBackend<{}>,>(
4333
return reject(new Error('Failed to send IPC message'))
4434
}
4535
// message from main process
46-
const listener = (message: { type: IPCMessageRequest; requestId: string; req: ReponseType }) => {
36+
const listener = (message: { type: Perun.RequestType; requestId: string; req: ReponseType }) => {
4737
if (message.type === type && message.requestId === requestId) {
4838
log(`resolved: [${type}]`, message);
4939
resolve(responseHandler(message.req))
@@ -63,7 +53,7 @@ const commonHandleResponse = <APIName extends keyof WalletBackend<{}>,>(
6353
export class IPCWalletBackend implements WalletBackend<{}> {
6454

6555
openChannelRequest(req: ValidOpenChannelRequest) {
66-
return commonHandleResponse('openChannelRequest', genReqeustId('openChannelRequest'), stringifyBuffer(req))
56+
return commonHandleResponse<"openChannelRequest">("OpenChannel", genReqeustId('openChannelRequest'), req)
6757
}
6858
// openChannelRequest(
6959
// req: ValidOpenChannelRequest
@@ -90,7 +80,11 @@ export class IPCWalletBackend implements WalletBackend<{}> {
9080
// })
9181
// }
9282
updateNotificationRequest(req: UpdateNotificationRequest) {
93-
return commonHandleResponse('updateNotificationRequest', genReqeustId('updateNotificationRequest'), req)
83+
return commonHandleResponse<"updateNotificationRequest">(
84+
"UpdateNotification",
85+
genReqeustId('updateNotificationRequest'),
86+
req
87+
)
9488
}
9589
// updateNotificationRequest(req: UpdateNotificationRequest): Promise<{ accepted?: boolean | undefined }> {
9690
// return new Promise((resolve, _) => {
@@ -117,12 +111,12 @@ export class IPCWalletBackend implements WalletBackend<{}> {
117111
// }
118112

119113
signMessageRequest(req: ValidSignMessageRequest<{}>) {
120-
return commonHandleResponse(
121-
'signMessageRequest',
114+
return commonHandleResponse<"signMessageRequest">(
115+
"SignMessage",
122116
genReqeustId('signMessageRequest'),
123-
stringifyBuffer(req),
117+
req,
124118
(responseData) => {
125-
if(responseData.signature) {
119+
if (responseData.signature) {
126120
responseData.signature = bytes.bytify(responseData.signature)
127121
}
128122
return responseData;
@@ -160,12 +154,12 @@ export class IPCWalletBackend implements WalletBackend<{}> {
160154
// }
161155

162156
signTransactionRequest(req: SignTransactionRequest) {
163-
return commonHandleResponse(
164-
'signTransactionRequest',
165-
genReqeustId('signTransactionRequest'),
166-
stringifyBuffer(req),
157+
return commonHandleResponse<"signTransactionRequest">(
158+
"SignTransaction",
159+
genReqeustId('signTransactionRequest'),
160+
req,
167161
(responseData) => {
168-
if(responseData.transaction) {
162+
if (responseData.transaction) {
169163
responseData.transaction = new TextEncoder().encode(responseData.transaction)
170164
}
171165
return responseData;

0 commit comments

Comments
 (0)