mirror of
https://github.com/RoboSats/robosats.git
synced 2024-09-11 14:05:51 +03:00
Add trade summary at trade finish
This commit is contained in:
parent
61b6148128
commit
834733cb61
7
.github/workflows/frontend-build.yml
vendored
7
.github/workflows/frontend-build.yml
vendored
@ -46,4 +46,9 @@ jobs:
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: main-js
|
||||
path: frontend/static/frontend/main.js
|
||||
path: frontend/static/frontend/main.js
|
||||
- name: 'Invoke Docker Build CI workflow'
|
||||
uses: benc-uk/workflow-dispatch@v1
|
||||
with:
|
||||
workflow: 'Docker Image CI'
|
||||
token: ${{ secrets.PERSONAL_TOKEN }}
|
@ -1568,5 +1568,53 @@ class Logics:
|
||||
context['bad_invoice'] = failure_reason
|
||||
return False, context
|
||||
|
||||
@classmethod
|
||||
def summarize_trade(cls, order, user):
|
||||
'''
|
||||
Summarizes a finished order. Returns a dict with
|
||||
amounts, fees, costs, etc, for buyer and seller.
|
||||
'''
|
||||
if order.status != Order.Status.SUC:
|
||||
return False, {'bad_summary':'Order has not finished yet'}
|
||||
|
||||
context = {}
|
||||
|
||||
users = {'taker': order.taker, 'maker': order.maker}
|
||||
for order_user in users:
|
||||
|
||||
summary = {}
|
||||
summary['trade_fee_percent'] = FEE * MAKER_FEE_SPLIT if order_user == 'maker' else FEE * (1 - MAKER_FEE_SPLIT)
|
||||
summary['bond_size_sats'] = order.maker_bond.num_satoshis if order_user == 'maker' else order.taker_bond.num_satoshis
|
||||
summary['bond_size_percent'] = order.bond_size
|
||||
summary['is_buyer'] = cls.is_buyer(order, users[order_user])
|
||||
|
||||
if summary['is_buyer']:
|
||||
summary['sent_fiat'] = order.amount
|
||||
if order.is_swap:
|
||||
summary['received_sats'] = order.payout_tx.sent_satoshis
|
||||
else:
|
||||
summary['received_sats'] = order.payout.num_satoshis
|
||||
summary['trade_fee_sats'] = round(order.last_satoshis - summary['received_sats'])
|
||||
# Only add context for swap costs if the user is the swap recipient. Peer should not know whether it was a swap
|
||||
if users[order_user] == user and order.is_swap:
|
||||
summary['is_swap'] = order.is_swap
|
||||
summary['received_onchain_sats'] = order.payout_tx.sent_satoshis
|
||||
summary['mining_fee_sats'] = order.payout_tx.mining_fee_sats
|
||||
summary['swap_fee_sats'] = round(order.payout_tx.num_satoshis - order.payout_tx.mining_fee_sats - order.payout_tx.sent_satoshis)
|
||||
summary['swap_fee_percent'] = order.payout_tx.swap_fee_rate
|
||||
else:
|
||||
summary['sent_sats'] = order.trade_escrow.num_satoshis
|
||||
summary['received_fiat'] = order.amount
|
||||
summary['trade_fee_sats'] = round(summary['sent_sats'] - order.last_satoshis )
|
||||
context[f'{order_user}_summary']=summary
|
||||
|
||||
platform_summary = {}
|
||||
if not order.is_swap:
|
||||
platform_summary['routing_fee_sats'] = order.payout.fee
|
||||
platform_summary['trade_revenue_sats'] = int(order.trade_escrow.num_satoshis - order.payout.num_satoshis - order.payout.fee)
|
||||
else:
|
||||
platform_summary['routing_fee_sats'] = 0
|
||||
platform_summary['trade_revenue_sats'] = int(order.trade_escrow.num_satoshis - order.payout_tx.num_satoshis)
|
||||
context['platform_summary'] = platform_summary
|
||||
|
||||
return True, context
|
@ -395,6 +395,11 @@ class OrderView(viewsets.ViewSet):
|
||||
data["bond_size"] = order.bond_size
|
||||
data["bondless_taker"] = order.bondless_taker
|
||||
|
||||
# Adds trade summary
|
||||
valid, context = Logics.summarize_trade(order, request.user)
|
||||
if valid:
|
||||
data = {**data, **context}
|
||||
|
||||
# If status is 'Expired' add expiry reason
|
||||
if order.status == Order.Status.EXP:
|
||||
data["expiry_reason"] = order.expiry_reason
|
||||
@ -402,7 +407,6 @@ class OrderView(viewsets.ViewSet):
|
||||
|
||||
# If status is 'Succes' add final stats and txid if it is a swap
|
||||
if order.status == Order.Status.SUC:
|
||||
# TODO: add summary of order for buyer/sellers: sats in/out, fee paid, total time? etc
|
||||
# If buyer and is a swap, add TXID
|
||||
if Logics.is_buyer(order,request.user):
|
||||
if order.is_swap:
|
||||
|
@ -4,7 +4,7 @@ import { SvgIcon } from "@mui/material"
|
||||
export default function BitcoinIcon(props) {
|
||||
return (
|
||||
<SvgIcon sx={props.sx} color={props.color} viewBox="0 0 512 512">
|
||||
<path d="M48 32C48 14.33 62.33 0 80 0C97.67 0 112 14.33 112 32V64H144V32C144 14.33 158.3 0 176 0C193.7 0 208 14.33 208 32V64C208 65.54 207.9 67.06 207.7 68.54C254.1 82.21 288 125.1 288 176C288 200.2 280.3 222.6 267.3 240.9C298.9 260.7 320 295.9 320 336C320 397.9 269.9 448 208 448V480C208 497.7 193.7 512 176 512C158.3 512 144 497.7 144 480V448H112V480C112 497.7 97.67 512 80 512C62.33 512 48 497.7 48 480V448H41.74C18.69 448 0 429.3 0 406.3V101.6C0 80.82 16.82 64 37.57 64H48V32zM176 224C202.5 224 224 202.5 224 176C224 149.5 202.5 128 176 128H64V224H176zM64 288V384H208C234.5 384 256 362.5 256 336C256 309.5 234.5 288 208 288H64z"/>
|
||||
<path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"/>
|
||||
</SvgIcon>
|
||||
);
|
||||
}
|
@ -3,7 +3,7 @@ import { SvgIcon } from "@mui/material"
|
||||
|
||||
export default function RoboSatsTextIcon(props) {
|
||||
return (
|
||||
<SvgIcon {...props} x="0px" y="0px" width="2000px" height="1000px" viewBox="0 300 2000 1000">
|
||||
<SvgIcon {...props} x="0px" y="0px" width="2000px" height="1000px" viewBox="0 300 2000 150">
|
||||
<g>
|
||||
<path d="M455.556,849.519c10.487-10.606,18.315-22.243,23.484-35.499c11.767-30.177,10.624-59.483-6.55-87.546
|
||||
c-6.421-10.492-15.644-18.342-24.709-26.363c-42.412-37.528-84.791-75.089-127.178-112.646c-0.23-0.204-0.403-0.473-0.833-0.988
|
||||
|
@ -4,6 +4,7 @@ import { Alert, AlertTitle, ToggleButtonGroup, ToggleButton, IconButton, Box, Li
|
||||
import QRCode from "react-qr-code";
|
||||
import Countdown, { zeroPad} from 'react-countdown';
|
||||
import Chat from "./EncryptedChat"
|
||||
import TradeSummary from "./TradeSummary"
|
||||
import MediaQuery from 'react-responsive'
|
||||
import QrReader from 'react-qr-reader'
|
||||
import { copyToClipboard } from "../utils/clipboard";
|
||||
@ -22,6 +23,7 @@ import PlayCircleIcon from '@mui/icons-material/PlayCircle';
|
||||
import BoltIcon from '@mui/icons-material/Bolt';
|
||||
import LinkIcon from '@mui/icons-material/Link';
|
||||
import AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet';
|
||||
import FavoriteIcon from '@mui/icons-material/Favorite';
|
||||
import { NewTabIcon } from "./Icons";
|
||||
|
||||
import { getCookie } from "../utils/cookies";
|
||||
@ -1221,20 +1223,14 @@ handleRatingRobosatsChange=(e)=>{
|
||||
{this.Sound("successful")}
|
||||
<Grid item xs={12} align="center">
|
||||
<Typography component="h6" variant="h6">
|
||||
{t("🎉Trade finished!🥳")}
|
||||
</Typography>
|
||||
</Grid>
|
||||
{/* <Grid item xs={12} align="center">
|
||||
<Typography variant="body2" align="center">
|
||||
What do you think of ⚡<b>{this.props.data.is_maker ? this.props.data.taker_nick : this.props.data.maker_nick}</b>⚡?
|
||||
<div style={{display:'flex',alignItems:'center', flexWrap:'wrap', justifyContent:'center'}}>
|
||||
<BoltIcon sx={{width:25,height:37}} color="warning"/>{t("Trade finished!")}<BoltIcon sx={{width:25,height:37}} color="warning"/>
|
||||
</div>
|
||||
</Typography>
|
||||
</Grid>
|
||||
<Grid item xs={12} align="center">
|
||||
<Rating name="size-large" defaultValue={0} size="large" onChange={this.handleRatingUserChange} />
|
||||
</Grid> */}
|
||||
<Grid item xs={12} align="center">
|
||||
<Typography variant="body2" align="center">
|
||||
<Trans i18nKey="rate_robosats">What do you think of 🤖<b>RoboSats</b>⚡?</Trans>
|
||||
<Trans i18nKey="rate_robosats">What do you think of <b>RoboSats</b>?</Trans>
|
||||
</Typography>
|
||||
</Grid>
|
||||
<Grid item xs={12} align="center">
|
||||
@ -1242,9 +1238,9 @@ handleRatingRobosatsChange=(e)=>{
|
||||
</Grid>
|
||||
{this.state.rating_platform==5 ?
|
||||
<Grid item xs={12} align="center">
|
||||
<Typography variant="body2" align="center">
|
||||
<b>{t("Thank you! RoboSats loves you too ❤️")}</b>
|
||||
</Typography>
|
||||
<div style={{display:'flex',alignItems:'center', flexWrap:'wrap', justifyContent:'center'}}>
|
||||
<Typography variant="body2" align="center"><b>{t("Thank you! RoboSats loves you too")}</b> </Typography><FavoriteIcon color="error"/>
|
||||
</div>
|
||||
<Typography variant="body2" align="center">
|
||||
{t("RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!")}
|
||||
</Typography>
|
||||
@ -1279,21 +1275,32 @@ handleRatingRobosatsChange=(e)=>{
|
||||
</Grid>
|
||||
: null}
|
||||
|
||||
<Grid item xs={12} align="center">
|
||||
<Button color='primary' onClick={() => {this.props.push('/')}}>{t("Start Again")}</Button>
|
||||
<Grid container>
|
||||
<Grid item xs={show_renew? 6: 12} align="center">
|
||||
<Button color='primary' onClick={() => {this.props.push('/')}}>{t("Start Again")}</Button>
|
||||
</Grid>
|
||||
|
||||
{show_renew ?
|
||||
<Grid item xs={6} align="center">
|
||||
{this.state.renewLoading ?
|
||||
<CircularProgress/>
|
||||
:
|
||||
<Button color='primary' onClick={this.handleRenewOrderButtonPressed}>{t("Renew Order")}</Button>
|
||||
}
|
||||
</Grid>
|
||||
: null}
|
||||
</Grid>
|
||||
|
||||
{show_renew ?
|
||||
<Grid item xs={12} align="center">
|
||||
{this.state.renewLoading ?
|
||||
<CircularProgress/>
|
||||
:
|
||||
<Button color='primary' onClick={this.handleRenewOrderButtonPressed}>{t("Renew Order")}</Button>
|
||||
}
|
||||
</Grid>
|
||||
: null}
|
||||
<TradeSummary
|
||||
isMaker={this.props.data.is_maker}
|
||||
makerNick={this.props.data.maker_nick}
|
||||
takerNick={this.props.data.taker_nick}
|
||||
currencyCode={this.props.data.currencyCode}
|
||||
makerSummary={this.props.data.maker_summary}
|
||||
takerSummary={this.props.data.taker_summary}
|
||||
platformSummary={this.props.data.platform_summary}
|
||||
/>
|
||||
|
||||
{this.showBondIsReturned()}
|
||||
</Grid>
|
||||
)
|
||||
}
|
||||
|
197
frontend/src/components/TradeSummary.tsx
Normal file
197
frontend/src/components/TradeSummary.tsx
Normal file
@ -0,0 +1,197 @@
|
||||
import React, { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import {
|
||||
Avatar,
|
||||
Badge,
|
||||
ToggleButton,
|
||||
ToggleButtonGroup,
|
||||
List,
|
||||
Chip,
|
||||
ListItem,
|
||||
ListItemText,
|
||||
ListItemIcon,
|
||||
Grid,
|
||||
Divider,
|
||||
Typography,
|
||||
} from "@mui/material"
|
||||
import { pn } from "../utils/prettyNumbers";
|
||||
|
||||
// Icons
|
||||
import FlagWithProps from "./FlagWithProps";
|
||||
import PercentIcon from '@mui/icons-material/Percent';
|
||||
import AccountBalanceIcon from '@mui/icons-material/AccountBalance';
|
||||
import RouteIcon from '@mui/icons-material/Route';
|
||||
import AccountBoxIcon from '@mui/icons-material/AccountBox';
|
||||
import LockOpenIcon from '@mui/icons-material/LockOpen';
|
||||
import LinkIcon from '@mui/icons-material/Link';
|
||||
import { RoboSatsNoTextIcon , SendReceiveIcon , BitcoinIcon} from "./Icons";
|
||||
|
||||
interface Item {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
type Props = {
|
||||
isMaker: boolean;
|
||||
makerNick: string;
|
||||
takerNick: string;
|
||||
currencyCode: string;
|
||||
makerSummary: Record<string, Item>;
|
||||
takerSummary: Record<string, Item>;
|
||||
platformSummary: Record<string, Item>;
|
||||
bondPercent: number;
|
||||
}
|
||||
|
||||
const TradeSummary = ({
|
||||
isMaker,
|
||||
makerNick,
|
||||
takerNick,
|
||||
currencyCode,
|
||||
makerSummary,
|
||||
takerSummary,
|
||||
platformSummary,
|
||||
bondPercent,
|
||||
}: Props): JSX.Element => {
|
||||
const { t } = useTranslation();
|
||||
const [buttonValue, setButtonValue] = useState<number>(isMaker ? 0 : 2);
|
||||
var userSummary = buttonValue == 0 ? makerSummary : takerSummary;
|
||||
|
||||
return (
|
||||
<Grid item xs={12} align="center">
|
||||
<List>
|
||||
<Divider>
|
||||
<Chip label={t("Trade Summary")}/>
|
||||
</Divider>
|
||||
</List>
|
||||
<ToggleButtonGroup
|
||||
size="small"
|
||||
value={buttonValue}
|
||||
exclusive>
|
||||
<ToggleButton value={0} disableRipple={true} onClick={() => setButtonValue(0)}>
|
||||
<Avatar
|
||||
className="flippedSmallAvatar"
|
||||
sx={{height:24,width:24}}
|
||||
alt={makerNick}
|
||||
src={window.location.origin +'/static/assets/avatars/' + makerNick + '.png'}
|
||||
/>
|
||||
|
||||
{t("Maker")}
|
||||
</ToggleButton>
|
||||
<ToggleButton value={1} disableRipple={true} onClick={() => setButtonValue(1)}>
|
||||
<RoboSatsNoTextIcon/>
|
||||
</ToggleButton>
|
||||
<ToggleButton value={2} disableRipple={true} onClick={() => setButtonValue(2)}>
|
||||
{t("Taker")}
|
||||
|
||||
<Avatar
|
||||
className="smallAvatar"
|
||||
sx={{height:24,width:24}}
|
||||
alt={takerNick}
|
||||
src={window.location.origin +'/static/assets/avatars/' + takerNick + '.png'}
|
||||
/>
|
||||
</ToggleButton>
|
||||
</ToggleButtonGroup>
|
||||
|
||||
{/* Maker/Taker Summary */}
|
||||
<div style={{display: [0,2].includes(buttonValue) ? '':'none'}}>
|
||||
<List dense={true}>
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<Badge
|
||||
overlap="circular"
|
||||
anchorOrigin={{horizontal: 'right', vertical: 'bottom'}}
|
||||
badgeContent={<div
|
||||
style={{position:"relative", left:"3px", top:"2px"}}>
|
||||
{userSummary.is_buyer ?
|
||||
<SendReceiveIcon
|
||||
sx={{transform: "scaleX(-1)",height:"18px",width:"18px"}}
|
||||
color="secondary"/>
|
||||
: <SendReceiveIcon
|
||||
sx={{height:"18px",width:"18px"}}
|
||||
color="primary"/>
|
||||
}
|
||||
</div>}>
|
||||
<AccountBoxIcon sx={{position:'relative',left:-2,width:28,height:28}}/>
|
||||
</Badge>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={userSummary.is_buyer ? t("Buyer") : t("Seller")}
|
||||
secondary={t("User role")}/>
|
||||
|
||||
<ListItemIcon>
|
||||
<div style={{position:'relative',left:15,zoom:1.25,opacity: 0.7,msZoom:1.25,WebkitZoom:1.25,MozTransform:'scale(1.25,1.25)',MozTransformOrigin:'left center'}}>
|
||||
<FlagWithProps code={currencyCode}/>
|
||||
</div>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={(userSummary.is_buyer ? pn(userSummary.sent_fiat) : pn(userSummary.received_fiat))+" "+currencyCode}
|
||||
secondary={userSummary.is_buyer ? t("Sent") : t("Received")}/>
|
||||
</ListItem>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<BitcoinIcon/>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={pn(userSummary.is_buyer ? userSummary.received_sats : userSummary.sent_sats)+" Sats"}
|
||||
secondary={userSummary.is_buyer ? "BTC received" : "BTC sent"}/>
|
||||
|
||||
<ListItemText
|
||||
primary={t("{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",{tradeFeeSats:userSummary.trade_fee_sats,tradeFeePercent:parseFloat((userSummary.trade_fee_percent*100).toPrecision(3))})}
|
||||
secondary={"Trade fee"}/>
|
||||
</ListItem>
|
||||
|
||||
{userSummary.is_swap ?
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<LinkIcon/>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t("{{swapFeeSats}} Sats ({{swapFeePercent}}%)" , {swapFeeSats:pn(userSummary.swap_fee_sats), swapFeePercent:userSummary.swap_fee_percent})}
|
||||
secondary={t("Onchain swap fee")}/>
|
||||
<ListItemText
|
||||
primary={t("{{miningFeeSats}} Sats",{miningFeeSats:userSummary.mining_fee_sats})}
|
||||
secondary={t("Mining fee")}/>
|
||||
</ListItem>
|
||||
: null}
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<LockOpenIcon color="success"/>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t("{{bondSats}} Sats ({{bondPercent}}%)" , {bondSats:pn(userSummary.bond_size_sats), bondPercent:userSummary.bond_size_percent})}
|
||||
secondary={buttonValue === 0 ? t("Maker bond") : t("Taker bond") }/>
|
||||
<ListItemText
|
||||
sx={{color:'#2e7d32'}}
|
||||
primary={<b>{t("Unlocked")}</b>}/>
|
||||
</ListItem>
|
||||
</List>
|
||||
</div>
|
||||
{/* Platform Summary */}
|
||||
<div style={{display: buttonValue == 1 ? '':'none'}}>
|
||||
<List dense={true}>
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<AccountBalanceIcon/>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t("{{revenueSats}} Sats",{revenueSats:platformSummary.trade_revenue_sats})}
|
||||
secondary={t("Platform trade revenue")}/>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<RouteIcon/>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t("{{routingFeeSats}} MiliSats",{routingFeeSats:platformSummary.routing_fee_sats})}
|
||||
secondary={t("Platform covered routing fee")}/>
|
||||
</ListItem>
|
||||
</List>
|
||||
</div>
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
|
||||
export default TradeSummary;
|
||||
|
@ -310,8 +310,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Confirmes que has rebut {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirmant que has rebut el fiat finalitzarà l'intercanvi. Els Sats del col·lateral s'enviaran al comparador. Confirma només després d'assegurar que t'hagi arribat {{currencyCode}}. A més, si ho has rebut {{currencyCode}} i no confirmes la recepció, t'arriesques a perdre la teva fiança.",
|
||||
"Confirm":"Confirmar",
|
||||
"🎉Trade finished!🥳":"🎉Intercanvi finalitzat!🥳",
|
||||
"rate_robosats":"Què opines de 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Intercanvi finalitzat!",
|
||||
"rate_robosats":"Què opines de <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Moltes gràcies! RoboSats també t'estima ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats millora amb més liquiditat i usuaris. Explica-li a un amic bitcoiner sobre RoboSats!",
|
||||
"Thank you for using Robosats!":"Gràcies per fer servir RoboSats!",
|
||||
|
@ -332,8 +332,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Bestätige den Erhalt von {{currencyCode}}",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Nach dem Bestätigen der Zahlung, wird der Trade beendet. Die hinterlegten Satoshi gehen an den Käufer. Bestätige nur, wenn die {{currencyCode}}-Zahlung angekommen ist. Falls du die {{currencyCode}}-Zahlung erhalten hast und dies nicht bestätigst, verlierst du ggf. deine Kaution und die Handelssumme.",
|
||||
"Confirm":"Bestätigen",
|
||||
"🎉Trade finished!🥳":"🎉Trade abgeschlossen!🥳",
|
||||
"rate_robosats":"Was hältst du von 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Trade abgeschlossen!",
|
||||
"rate_robosats":"Was hältst du von <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Danke! RoboSats liebt dich auch ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats wird noch besser mit mehr Nutzern und Liquidität. Erzähl einem Bitcoin-Freund von uns!",
|
||||
"Thank you for using Robosats!":"Danke, dass du Robosats benutzt hast!",
|
||||
|
@ -334,8 +334,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Confirm you received {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.",
|
||||
"Confirm":"Confirm",
|
||||
"🎉Trade finished!🥳":"🎉Trade finished!🥳",
|
||||
"rate_robosats":"What do you think of 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Trade finished!",
|
||||
"rate_robosats":"What do you think of <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Thank you! RoboSats loves you too ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!",
|
||||
"Thank you for using Robosats!":"Thank you for using Robosats!",
|
||||
|
@ -335,8 +335,8 @@
|
||||
"Confirm you received {{currencyCode}}?": "¿Confirmas que has recibido {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.": "Confirmando que has recibido el fiat finalizará el intercambio. Los Sats del colateral se enviarán al comparador. Confirma sólo después de asegurar que te ha llegado {{currencyCode}}. Además, si lo has recibido {{currencyCode}} y no confirmas la recepción, te arriesgas a perder tu fianza.",
|
||||
"Confirm": "Confirmar",
|
||||
"🎉Trade finished!🥳": "🎉¡Intercambio finalizado!🥳",
|
||||
"rate_robosats": "¿Qué opinas de 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!": "¡Intercambio finalizado!",
|
||||
"rate_robosats": "¿Qué opinas de <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️": "¡Muchas gracias! RoboSats también te ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats mejora con más liquidez y usuarios. ¡Cuéntale a un amigo bitcoiner sobre RoboSats!",
|
||||
"Thank you for using Robosats!": "¡Gracias por usar RoboSats!",
|
||||
@ -406,7 +406,27 @@
|
||||
"Lightning":"Lightning",
|
||||
"Onchain":"Onchain",
|
||||
"open_dispute":"Para abrir una disputa debes esperar <1><1/>",
|
||||
|
||||
"Trade Summary":"Resumen del intercambio",
|
||||
"Maker":"Creador",
|
||||
"Taker":"Tomador",
|
||||
"User role":"Operación",
|
||||
"Sent":"Enviado",
|
||||
"Received":"Recibido",
|
||||
"BTC received":"BTC recibido",
|
||||
"BTC sent":"BTC enviado",
|
||||
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)":"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
|
||||
"Trade fee":"Comisión",
|
||||
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)":"{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
|
||||
"Onchain swap fee":"Coste swap onchain",
|
||||
"{{miningFeeSats}} Sats":"{{miningFeeSats}} Sats",
|
||||
"{{bondSats}} Sats ({{bondPercent}}%)":"{{bondSats}} Sats ({{bondPercent}}%)",
|
||||
"Maker bond":"Fianza de creador",
|
||||
"Taker bond":"Fianza de tomador",
|
||||
"Unlocked":"Desbloqueada",
|
||||
"{{revenueSats}} Sats":"{{revenueSats}} Sats",
|
||||
"Platform trade revenue":"Beneficio de la plataforma",
|
||||
"{{routingFeeSats}} MiliSats":"{{routingFeeSats}} MiliSats",
|
||||
"Platform covered routing fee":"Coste de enrutado cubierto",
|
||||
|
||||
"INFO DIALOG - InfoDiagog.js": "App information and clarifications and terms of use",
|
||||
"Close": "Cerrar",
|
||||
|
@ -334,8 +334,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Baieztatu {{currencyCode}} jaso duzula?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Fiata jaso duzula baieztatzean, salerosketa amaituko da. Blokeatutako Satoshiak erosleari bidaliko zaizkio. Baieztatu bakarrik {{currencyCode}}ak zure kontuan jaso badituzu. Gainera, {{currencyCode}}ak jaso badituzu baina ez baduzu baieztatzen, zure fidantza galtzea arriskatzen duzu.",
|
||||
"Confirm":"Baieztatu",
|
||||
"🎉Trade finished!🥳":"🎉Salerosketa amaitua!🥳",
|
||||
"rate_robosats":"Zer iruditu zaizu 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Salerosketa amaitua!",
|
||||
"rate_robosats":"Zer iruditu zaizu <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Mila esker! RoboSatsek ere maite zaitu ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats hobetu egiten da likidezia eta erabiltzaile gehiagorekin. Aipatu Robosats lagun bitcoiner bati!",
|
||||
"Thank you for using Robosats!":"Mila esker Robosats erabiltzeagatik!",
|
||||
|
@ -293,8 +293,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Confirmez que vous avez reçu les {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirmer que vous avez reçu le fiat finalisera la transaction. Les satoshis dans le dépôt seront libérés à l'acheteur. Ne confirmez qu'après que les {{currencyCode}} soit arrivés sur votre compte. En outre, si vous avez reçu les {{currencyCode}} et que vous ne confirmez pas la réception, vous risquez de perdre votre caution.",
|
||||
"Confirm":"Confirmer",
|
||||
"🎉Trade finished!🥳":"🎉Transaction terminée!🥳",
|
||||
"rate_robosats":"Que pensez-vous de 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Transaction terminée!",
|
||||
"rate_robosats":"Que pensez-vous de <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Merci! RoboSats vous aime aussi ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats s'améliore avec plus de liquidité et d'utilisateurs. Parlez de Robosats à un ami bitcoiner!",
|
||||
"Thank you for using Robosats!":"Merci d'utiliser Robosats!",
|
||||
|
@ -336,8 +336,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Confermi la ricezione di {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confermando la ricezione del fiat la transazione sarà finalizzata. I sats depositati saranno rilasciati all'acquirente. Conferma solamente dopo che {{currencyCode}} sono arrivati sul tuo conto. In più, se se hai ricevuto {{currencyCode}} e non procedi a confermare la ricezione, rischi di perdere la cauzione.",
|
||||
"Confirm":"Conferma",
|
||||
"🎉Trade finished!🥳":"🎉Transazione conclusa!🥳",
|
||||
"rate_robosats":"Cosa pensi di 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Transazione conclusa!",
|
||||
"rate_robosats":"Cosa pensi di <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Grazie! Anche +RoboSats ti ama ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats migliora se ha più liquidità ed utenti. Parla di Robosats ai tuoi amici bitcoiner!",
|
||||
"Thank you for using Robosats!":"Grazie per aver usato Robosats!",
|
||||
|
@ -293,8 +293,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Potwierdź otrzymanie {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Potwierdzenie otrzymania fiata sfinalizuje transakcję. Satoshi w depozycie zostaną wydane kupującemu. Potwierdź dopiero po otrzymaniu {{currencyCode}} na Twoje konto. Ponadto, jeśli otrzymałeś {{currencyCode}} i nie potwierdzisz odbioru, ryzykujesz utratę kaucji.",
|
||||
"Confirm":"Potwierdzać",
|
||||
"🎉Trade finished!🥳":"🎉Handel zakończony!🥳",
|
||||
"rate_robosats":"Co myślisz o 🤖<1>RoboSats<//1>⚡?",
|
||||
"Trade finished!":"Handel zakończony!",
|
||||
"rate_robosats":"Co myślisz o <1>RoboSats<//1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Dziękuję! RoboSats też cię kocha ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats staje się lepszy dzięki większej płynności i użytkownikom. Powiedz znajomemu bitcoinerowi o Robosats!",
|
||||
"Thank you for using Robosats!":"Dziękujemy za korzystanie z Robosatów!",
|
||||
|
@ -319,8 +319,8 @@
|
||||
"Confirm you received {{currencyCode}}?": "Confirme que você recebeu {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.": "Confirmar que você recebeu o fiat finalizará a negociação. Os satoshis no depósito serão liberados para o comprador. Confirme apenas depois que o {{currencyCode}} chegar à sua conta. Além disso, se você recebeu {{currencyCode}} e não confirmar o recebimento, corre o risco de perder seu título.",
|
||||
"Confirm": "confirmar",
|
||||
"🎉Trade finished!🥳": "\uD83C\uDF89Negociação finalizada!\uD83E\uDD73",
|
||||
"rate_robosats": "O que você acha de \uD83E\uDD16<1>RoboSats</1>⚡?",
|
||||
"Trade finished!": "Negociação finalizada!",
|
||||
"rate_robosats": "O que você acha de <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️": "Obrigada! RoboSats também te ama ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats fica melhor com mais liquidez e usuários. Conte a um amigo bitcoiner sobre Robosats!",
|
||||
"Thank you for using Robosats!": "Obrigado por usar Robosats!",
|
||||
|
@ -332,8 +332,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Подтвердить получение {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Подтверждение того, что Вы получили фиатную валюту, завершит сделку. Сатоши в эскроу будут переданы покупателю. Подтвердите только после того, как {{currencyCode}} поступили на Ваш счёт. Кроме того, если Вы получили {{currencyCode}} и не подтвердите получение, Вы рискуете потерять свой залог.",
|
||||
"Confirm":"Подтвердить",
|
||||
"🎉Trade finished!🥳":"🎉Торговля завершена!!🥳",
|
||||
"rate_robosats":"Что Вы думаете о 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Торговля завершена!!",
|
||||
"rate_robosats":"Что Вы думаете о <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Спасибо! RoboSats тоже Вас любит ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats становится лучше с большей ликвидностью и пользователями. Расскажите другу-биткойнеру о Robosat!",
|
||||
"Thank you for using Robosats!":"Спасибо за использование Robosats!",
|
||||
|
@ -300,8 +300,8 @@
|
||||
"Confirm you received {{currencyCode}}?":"Confirm you received {{currencyCode}}?",
|
||||
"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.",
|
||||
"Confirm":"Confirm",
|
||||
"🎉Trade finished!🥳":"🎉Trade finished!🥳",
|
||||
"rate_robosats":"What do you think of 🤖<1>RoboSats</1>⚡?",
|
||||
"Trade finished!":"Trade finished!",
|
||||
"rate_robosats":"What do you think of <1>RoboSats</1>?",
|
||||
"Thank you! RoboSats loves you too ❤️":"Thank you! RoboSats loves you too ❤️",
|
||||
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!",
|
||||
"Thank you for using Robosats!":"Thank you for using Robosats!",
|
||||
|
Loading…
Reference in New Issue
Block a user