How to Manually Test Solidity Code Converted into F-star?

  • Thread starter zak100
  • Start date
  • Tags
    Code Test
In summary, you need to convert the solidity code into F-star in order to run it using the F* effect system.
  • #1
zak100
462
11
Hi,
I read a research paper for verification and validation of solidity code. It uses F* (F-star). However, it has to convert the solidity code into F-star. I can't find the converter. Can some body please guide me how to manually test the code? Code is given below:
Code:
  contract MyBank {

  mapping (address)==>uint) balances;

  function Deposit() {

  balances[msg.sender] += msg.value;

  }|

  function Withdraw(uint amount) {

  if(balances[msg.sender] >=amount) {

  msg.sender.send(amount);

  balances[msg.sender] -= amount;

}

}

function Balance() constant returns(uint) {

return balances[msg.sender];

}

A quick response is really appreciated.

Zulfi.
 
Technology news on Phys.org
  • #2
I don’t know if this will help but when doing java code we can setup junit tests to exercise the code. This is a somewhat manual process best done with an IDE like Netbeans or Eclipse. Junit is a framework for writing th testcases. It doesn’t read your code and write them.

I imagine whatever you’re referring to does the same thing. You have to look at your code and write inputs that exercise the conditional and looping logic and then compare actual output to expected output.
 
  • #3
Hi,
Thanks for your reply.

Hi,
What I understand is that:
Initially balance is zero. Then store some value in the balance using msg.value : let's suppose 500. & let's suppose in Withdraw(700) it checks that balance is greater than amount so it sends the amount & deducts balance which seems fine. However a conversion of the code into F* is shown below (from research paper: https://www.cs.umd.edu/~aseem/solidetherplas.pdf)

Code:
module MyBank
open Solidity
type state = f balances: mapping address uint; g
val store : state = fbalances = ref empty mapg
let deposit () : Eth unit =
update map store.balances msg.sender
(add (lookup store.balances msg.sender) msg.value)
let withdraw (amount:uint) : Eth unit =
if (ge (lookup store.balances msg.sender) amount) then
send msg.sender amount;
update map store.balances msg.sender
(sub (lookup store.balances msg.sender) amount)
let balance () : Eth uint =
lookup store.balances msg.sender

and when its analyzed using F*, it gives following error:

Using the effect system of F*, we now show how to detect
some vulnerable patterns such as unchecked send results in
translated contracts.
The base construction is a combined
exception and state monad (see [9] for details) with the
following signature:
EST (a:Type) = h0:heap // input heap
->send failed:bool // send failure flag
->Tot (option (a * heap) // result and new heap, or exception
* bool) // new failure flag

return (a:Type) (x:a) : EST a =
fun h0 b0->Some (x, h0), b0

bind (a:Type) (b:Type) (f:EST a) (g:a->EST b) : EST b =
fun h0 b0->
match f h0 b0 with
| None, b1->None, b1 // exception in f: no output heap
| Some (x, h1), b1->g x h1 b1 // run g, carry failure flag

Some body please guide me.

Zulfi.
 

1. How do I know if my code is working correctly?

To test your code, you can use a variety of methods such as unit testing, integration testing, and end-to-end testing. These tests will help identify any errors or bugs in your code and ensure it is functioning as intended.

2. What should I test in my code?

It is important to test all aspects of your code, including boundary cases, error handling, and edge cases. This will help ensure that your code can handle any possible scenarios and prevent unexpected errors from occurring.

3. How often should I test my code?

Ideally, code should be tested regularly throughout the development process, not just at the end. This will help catch any issues early on and make it easier to pinpoint and fix any problems that arise.

4. What tools or techniques can I use to test my code?

There are many different tools and techniques that can be used for testing code, such as manual testing, automated testing, and code reviews. It is important to choose the method that best suits your project and helps identify any potential issues.

5. How can I ensure that my test results are accurate?

To ensure accurate test results, it is important to have a clear understanding of the expected outcomes for each test. Additionally, using a variety of testing methods and incorporating peer reviews can help identify any discrepancies and improve the accuracy of your test results.

Similar threads

  • Programming and Computer Science
Replies
11
Views
810
  • Programming and Computer Science
Replies
2
Views
1K
  • Programming and Computer Science
Replies
5
Views
1K
  • Programming and Computer Science
Replies
4
Views
5K
  • Programming and Computer Science
Replies
6
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
5
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
0
Views
2K
  • Programming and Computer Science
Replies
2
Views
3K
Replies
152
Views
5K
Back
Top