diff --git a/README.md b/README.md
index eae584a..9c62374 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
Luanti mod to exchange in-game [currency](https://github.com/mt-mods/currency) with [libre currency](https://duniter.org) (Ğ1 blockchain).
Luanti server has a dedicated account.
-Player transfer money on it and the server gives them a corresponding amount of in-game banknotes.
+Players transfer money on it and the server gives them a corresponding amount of in-game banknotes.
They can then do whatever they want with the banknotes (trade, decorate walls, burn...).
Players can ask the server to transfer their banknotes to an account of their choice using a chat command.
@@ -13,6 +13,8 @@ It works with Ğ1v2 which is still in development/testing phase.
Put this repo in the `mods` directory.
+Add `g1_bridge` to `secure.http_mods`.
+
Have a local Duniter node.
```bash
@@ -31,6 +33,7 @@ Have a local Duniter node.
* Ensure all transfers are failproof (any communication, storage medium, server or whatever should be able to fail or rollback to a previous state, without causing double spend or money loss)
* Force reception account to exist
* Nice ATM-like interface
+* Accept mixed values (other banknotes values than 1)
## Workflow
diff --git a/init.lua b/init.lua
index 01e7a59..c385cb0 100644
--- a/init.lua
+++ b/init.lua
@@ -3,46 +3,45 @@ if http == nil then
error("Please add g1_bridge to secure.http_mods")
end
-minetest.register_chatcommand("g1", {
+minetest.register_chatcommand("g1_send", {
+ params = "
",
+ description = "Send MineGeld from your inventory to a G1 address. Fixed rate: 1G1=10MG.",
func = function(name, param)
local args = {}
for arg in string.gmatch(param,"%S+") do
- if #args >= 3 then
+ if #args >= 2 then
break
end
table.insert(args, arg)
end
- if #args >= 1 then
- core.chat_send_player(name, "args >= 1")
- if args[1] == "send" and #args == 3 and string.find(args[2],"^[%da-zA-Z]+$") and string.find(args[3],"^%d+$") then
- local address = args[2]
- local amount = tonumber(args[3])
- -- This version Lua does not have any way to check if a number is represented as an integer or a float,
- -- because it explicitely doesn't care.
- -- Hence, this program won't care if the player writes an invalid number,
- -- as there is no need to ensure arithmetic rules are respected. (as Lua's manual pretends)
- -- As the pattern excludes "." and nobody should have billions of items,
- -- it should still be safe. I hope.
- if type(amount) ~= "number" then
- return
- end
- local inv = core.get_inventory({type="player", name=name})
- local wanted_stack = "currency:minegeld "..amount
- local balanced = inv:contains_item("main", ItemStack(wanted_stack))
- if balanced then
- inv:remove_item("main", wanted_stack)
- http.fetch({url="http://127.0.0.1:30061/send/"..address.."/"..amount, method="GET"},
- function(res)
- if res.code == 200 then
- core.chat_send_player(name, "Transfer sent")
- else
- core.chat_send_player(name, "Error during transfer")
- end
+ if #args == 3 and string.find(args[1],"^[%da-zA-Z]+$") and string.find(args[2],"^%d+$") then
+ local address = args[1]
+ local amount = tonumber(args[2])
+ -- This version Lua does not have any way to check if a number is represented as an integer or a float,
+ -- because it explicitely doesn't care.
+ -- Hence, this program won't care if the player writes an invalid number,
+ -- as there is no need to ensure arithmetic rules are respected. (as Lua's manual pretends)
+ -- As the pattern excludes "." and nobody should have billions of items,
+ -- it should still be safe. I hope.
+ if type(amount) ~= "number" then
+ return
+ end
+ local inv = core.get_inventory({type="player", name=name})
+ local wanted_stack = "currency:minegeld "..amount
+ local balanced = inv:contains_item("main", ItemStack(wanted_stack))
+ if balanced then
+ inv:remove_item("main", wanted_stack)
+ http.fetch({url="http://127.0.0.1:30061/send/"..address.."/"..amount, method="GET"},
+ function(res)
+ if res.code == 200 then
+ core.chat_send_player(name, "Transfer sent")
+ else
+ core.chat_send_player(name, "Error during transfer")
end
- )
- else
- core.chat_send_player(name, "Not enough currency")
- end
+ end
+ )
+ else
+ core.chat_send_player(name, "Not enough currency")
end
end
end